VBScript在内部将日期表示为double,小数点左侧部分中的“year 0”日期以及当前日期到小数点右侧的午夜之后的毫秒数。如果
,“0年级”似乎是1899年WScript.Echo Year(CDate(0))
可以信任。
另一方面,JScript以1970年的“年0”开始,表示时间为从那时到现在的总毫秒数。
有人能指出我可以将JScript日期转换为VBScript日期的代码,然后再沿这些行转换,使用日期的基础Double或Long格式吗?
答案 0 :(得分:4)
Epoch是任何语言的纪元,自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
epoch now = 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
datetime from epoch 1346891880 = 6/09/2012 12:38:00 AM
答案 1 :(得分:2)
使用时间戳生成日期并转换为double。
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
答案 2 :(得分:0)
如果您只对在VBScript日期和JScript日期之间进行转换感兴趣,则可以通过Date
constructor和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>