VBScript 在内部将日期表示为双精度数,在小数点左侧表示从“0 年”开始的天数,在小数点右侧表示当天从午夜开始的毫秒数。“0 年”似乎是 1899 年,如果
WScript.Echo Year(CDate(0))
可以信任。
另一方面,JScript 以 1970 年的“0 年”开始,并将时间表示为从那时到现在的总毫秒数。
有人可以指出我可以使用基础的 Double 或 Long 日期格式将 JScript 日期转换为 VBScript 日期并沿这些线再次转换的代码吗?
纪元是任何语言的纪元,自 1970 年 1 月 1 日 00:00:00 UTC 以来过去的秒数。
'Get current epoch with vbScript ...
dim epoch
epoch = dateDiff("s", "01/01/1970 00:00:00", now())
wScript.echo "epoch now = " & epoch
现在的纪元 = 1346891880
'And convert it back (probably the one you need) ...
dim datetime
datetime = dateAdd("s", epoch, "01/01/1970 00:00:00")
wScript.echo "datetime from epoch " & epoch & " = " & datetime
纪元 1346891880 的日期时间 = 6/09/2012 12:38:00 AM
使用时间戳生成日期并转换为双精度。
Function CurrentTZOffset()
With CreateObject("WScript.Shell")
CurrentTZOffset = - .RegRead( _
"HKLM\System\CurrentControlSet\Control\TimeZoneInformation\ActiveTimeBias")
End With
End Function
Dim dblVbEpoch
dblVbEpoch = CDbl(DateAdd("s", 1336708766790 / 1000, #1970/1/1#))
WScript.Echo "VB Epoch :", dblVbEpoch
WScript.Echo "VB Date (GMT):", CDate(dblVbEpoch)
WScript.Echo "VB Date (LOCAL):", DateAdd("n", CurrentTZOffset(), CDate(dblVbEpoch))
WScript.Echo "JS Epoch From VB Epoch:", DateDiff("s", #1970/1/1#, CDate(dblVbEpoch)) * 1000
如果您只对在 VBScript 日期和 JScript 日期之间进行转换感兴趣,那么该功能将通过Date
构造函数和getVarDate
方法内置到 JScript 中。
一个小例子:
<job id="test">
<script language="JScript" id="jsLibrary">
function JSExample() {
var jsDate = new Date(2014, 4, 12);
VBPrintJSDate(jsDate);
}
function JSPrintVBDate(vbDate) {
var jsDate = new Date(vbDate);
WScript.Echo(jsDate.toUTCString());
}
</script>
<script language="VBScript" id="vbLibrary">
Option Explicit
Sub VBExample
Dim vbDate
vbDate = DateSerial(2000, 11, 30)
JSPrintVBDate(vbDate)
End Sub
Sub VBPrintJSDate(jsDate)
Dim vbDate
vbDate = jsDate.getVarDate()
WScript.Echo FormatDateTime(vbDate)
End Sub
</script>
<script language="VBScript" id="main">
Option Explicit
VBExample
JSExample
</script>
</job>