如何从JScript epoch转换为VBScript epoch?

时间:2012-06-03 09:15:23

标签: date vbscript epoch jscript

VBScript在内部将日期表示为double,小数点左侧部分中的“year 0”日期以及当前日期到小数点右侧的午夜之后的毫秒数。如果

,“0年级”似乎是1899年
WScript.Echo Year(CDate(0))

可以信任。

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

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

3 个答案:

答案 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 constructorgetVarDate方法将该功能内置到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>