2012-01-25 34 views
17

Tôi muốn ngày trông giống như MM-DD-YYYY thay vì MM/DD/YYYY.VBScript Làm thế nào tôi có thể định dạng ngày?

+0

Lưu ý rằng trong một số hệ thống, dấu gạch chéo được giả định là định dạng của Mỹ (m/d/y) và dấu gạch ngang được giả định là định dạng Euro (d-m-y). Vì vậy, trong một số trường hợp, việc chuyển đổi ngày kiểu Mỹ thành dấu gạch ngang có thể gây ra sự cố hoặc ít nhất là nhầm lẫn –

Trả lời

33
0 = vbGeneralDate - Default. Returns date: mm/dd/yy and time if specified: hh:mm:ss PM/AM. 
1 = vbLongDate - Returns date: weekday, monthname, year 
2 = vbShortDate - Returns date: mm/dd/yy 
3 = vbLongTime - Returns time: hh:mm:ss PM/AM 
4 = vbShortTime - Return time: hh:mm 


d=CDate("2010-02-16 13:45") 
document.write(FormatDateTime(d) & "<br />") 
document.write(FormatDateTime(d,1) & "<br />") 
document.write(FormatDateTime(d,2) & "<br />") 
document.write(FormatDateTime(d,3) & "<br />") 
document.write(FormatDateTime(d,4) & "<br />") 

Nếu bạn muốn sử dụng định dạng khác, bạn sẽ phải tạo chức năng và phân tích cú pháp Tháng, Năm, Ngày, vv và đặt chúng theo định dạng ưa thích.

Function myDateFormat(myDate) 
    d = WhatEver(Day(myDate)) 
    m = WhatEver(Month(myDate))  
    y = Year(myDate) 
    myDateFormat= m & "-" & d & "-" & y 
End Function 

Function WhatEver(num) 
    If(Len(num)=1) Then 
     WhatEver="0"&num 
    Else 
     WhatEver=num 
    End If 
End Function 

chỉnh sửa: chức năng thêm vào định dạng ngày và tháng như 0n nếu giá trị nhỏ hơn 10.

+1

+1 Điều này cũng giúp tôi! Cảm ơn @ stian.net – ckpepper02

10

Đầu ra của FormatDateTime phụ thuộc vào cấu hình trong Cài đặt vùng trong Pa-nen điều khiển. Vì vậy, ở các quốc gia khác, FormatDateTime (d, 2) có thể trả về yyyy-MM-dd.

Nếu bạn muốn đầu ra của mình trở thành "bất biến văn hóa", hãy sử dụng giải pháp của stian.net. Nếu bạn chỉ không thích chéo trong ngày và bạn không quan tâm về định dạng ngày tháng ở các nước khác, bạn chỉ có thể sử dụng

Replace(FormatDateTime(d,2),"/","-") 
+0

Có vẻ như bạn đang nói FormatDateTime (giải pháp của stian.net) cả hai là và không phải là văn hóa bất biến ...? Bối rối ... – track0

3

'cho tên tập tin duy nhất tôi sử dụng

Dim ts, logfile, thisScript 

thisScript = LEFT(Wscript.ScriptName,LEN(Wscript.ScriptName)-4) ' assuming .vbs extension 

ts = timeStamp 
logfile = thisScript & "_" & ts 

' ====== 
Function timeStamp() 
    timeStamp = Year(Now) & "-" & _ 
    Right("0" & Month(Now),2) & "-" & _ 
    Right("0" & Day(Now),2) & "_" & _ 
    Right("0" & Hour(Now),2) & _ 
    Right("0" & Minute(Now),2) ' '& _ Right("0" & Second(Now),2) 
End Function 
' ====== 
15

Gợi ý gọi 'Bây giờ' chỉ một lần trong chức năng để bảo vệ chống lại phút, hoặc thậm chí cả ngày, thay đổi trong quá trình thực hiện chức năng.

Như vậy:

Function timeStamp() 
    Dim t 
    t = Now 
    timeStamp = Year(t) & "-" & _ 
    Right("0" & Month(t),2) & "-" & _ 
    Right("0" & Day(t),2) & "_" & _ 
    Right("0" & Hour(t),2) & _ 
    Right("0" & Minute(t),2) ' '& _ Right("0" & Second(t),2) 
End Function 
0

Mặc dù câu trả lời được cung cấp tôi thấy giải pháp đơn giản hơn:

ngày:

01/20/2017 

Bằng cách thay thế

CurrentDate = replace(date, "/", "-") 

Nó sẽ ra:

01-20-2017 
+0

Tùy thuộc vào cài đặt miền địa phương của hệ thống, điều này có thể không dẫn đến MM-DD-YYYY – Jobbo

0

Đoạn mã này cũng giải quyết câu hỏi này với datePart function. Tôi cũng đã sử dụng thủ thuật right() để thực hiện một số rpad(x,2,"0").

option explicit 

Wscript.Echo "Today is " & myDate(now) 

' date formatted as your request 
Function myDate(dt) 
    dim d,m,y, sep 
    sep = "-" 
    ' right(..) here works as rpad(x,2,"0") 
    d = right("0" & datePart("d",dt),2) 
    m = right("0" & datePart("m",dt),2) 
    y = datePart("yyyy",dt) 
    myDate= m & sep & d & sep & y 
End Function 
Các vấn đề liên quan