2012-06-03 4 views
1

VBScript представляет даты внутренне как двойные, дни с «года 0» в части слева от десятичной точки и миллисекунды с полуночи в течение текущего дня справа от десятичной. «Год 0», по-видимому, равен 1899, еслиКак конфертировать из эпохи JScript в/из эпохи VBScript?

WScript.Echo Year(CDate(0)) 

можно доверять.

JScript, с другой стороны, начинается с «года 0» 1970 года и представляет время как общее количество миллисекунд с этого момента до настоящего времени.

Может ли кто-нибудь указать мне код, который позволяет преобразовать даты JScript в даты VBScript и обратно по этим строкам, используя базовый двойной или длинный формат даты?

ответ

1

Создать дату, используя временную метку и преобразовать в двойное.

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 
+0

Там что-то неладно с этим кодом. Если я установил ch на 1336708766790 (11-May-2012 11: 59: 26.790), а затем запустил этот код, он говорит: VB Epoch: 41040.1662731481 VB Дата: 11/05/2012 3:59:26 AM JS Эпоха От VB Эпоха: 1336708766000 – bugmagnet

+0

@boost На самом деле нет. Он основан на GMT, как и должно быть. JS показывает, что локальные даты зависят от операционной системы, локали или браузера. например 'new Date (1336708766790)' будет возвращать '11-May-2012 06: 59: 26.790' для меня beacuse часового пояса. Если вы хотите локализовать дату, вам необходимо получить текущее смещение часового пояса. Я обновил ответ об этом. –

+0

js возвращает миллисекунды, поэтому parseInt ((новая дата) .getTime()/1000) = proper_epoch. – ekerner

3

Epoch это эпоха на любом языке, количество секунд прошедшее с 00:00:00 UTC, 1 января 1970 года

'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 

datetime из эпохи 1346891880 = 6/09/2012 12:38:00 AM

0

Если вы заинтересованы только в преобразовании между датами VBScript и JScript датами, что функциональность встроена в JScript, с помощью Date constructor и методы getVarDate.

Небольшой пример:

<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> 
Смежные вопросы