1

VBScript 在内部将日期表示为双精度数,在小数点左侧表示从“0 年”开始的天数,在小数点右侧表示当天从午夜开始的毫秒数。“0 年”似乎是 1899 年,如果

WScript.Echo Year(CDate(0))

可以信任。

另一方面,JScript 以 1970 年的“0 年”开始,并将时间表示为从那时到现在的总毫秒数。

有人可以指出我可以使用基础的 Double 或 Long 日期格式将 JScript 日期转换为 VBScript 日期并沿这些线再次转换的代码吗?

4

3 回答 3

4

纪元是任何语言的纪元,自 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

于 2012-09-05T15:11:42.780 回答
2

使用时间戳生成日期并转换为双精度。

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
于 2012-06-03T13:05:03.370 回答
0

如果您只对在 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>
于 2014-08-13T06:35:40.273 回答