2012-03-09 132 views
0

我想在我的中獲得完整格式的日期。例如,我把
DateParam = FormatDateTime(Date()-1, 2)VBS中的日期格式

但它返回

3/8/2012
我需要的功能恢復
03/08/2012代替。

有誰知道如何解決這個問題?

回答

-2
ThisDate = Date() 

MyDate = Right("0" & CStr(Month(ThisDate)), 2) & "/" & _ 
     Right("0" & CStr(Day(ThisDate)), 2) & "/" & CStr(Year(ThisDate)) 
1

FormatDateTime函數是沒用的,因爲它取決於用戶的具體和全局區域設置。

對於日期來說,最好的(最少的努力獲得最大的收益)解決方案 - 攻擊.NET - 是有缺陷的;再次因爲依賴區域設置。

如果你想/需要推出你自己的功能,從fmtDate()開始。

Dim g_oSB : Set g_oSB = CreateObject("System.Text.StringBuilder") 

Function sprintf(sFmt, aData) 
    g_oSB.AppendFormat_4 sFmt, (aData) 
    sprintf = g_oSB.ToString() 
    g_oSB.Length = 0 
End Function 

Function fmtDate(dtX) 
    fmtDate = Join(Array(   _ 
     Right(100 + Month(dtX), 2) _ 
    , Right(100 + Day(dtX), 2) _ 
    ,    Year(dtX)  _ 
), "/") 
End Function 

Dim dtYesterday : dtYesterday = Date() - 1 
WScript.Echo "Yesterday:", dtYesterday, GetLocale() 
WScript.Echo "sprintf (silly) =>", sprintf("{0:MM/dd/yyyy}", Array(dtYesterday)) 
WScript.Echo "sprintf (clumsy) =>", sprintf("{0:MM}/{0:dd}/{0:yyyy}", Array(dtYesterday)) 
WScript.Echo "fmtDate   =>", fmtDate(dtYesterday) 

輸出:

Yesterday: 08.03.2012 1033 
sprintf (silly) => 03.08.2012 
sprintf (clumsy) => 03/08/2012 
fmtDate   => 03/08/2012 

關於第二個想法:

逃離 「/」 有助於使的sprintf()可用:

WScript.Echo "sprintf (silly me) =>", sprintf("{0:MM\/dd\/yyyy}", Array(dtYesterday)) 

輸出:

sprintf (silly me) => 03/08/2012 

所以不要打擾fmt *功能,但使用.NET格式。

+0

是否有資源列出哪些.NET庫暴露給VBScript? – 2012-03-11 16:40:02