Время эпохи .NET в JavaScript (выходной?) - PullRequest
1 голос
/ 05 октября 2011

Использование следующего кода в .NET

Input: "2011-09-14 00:00:00.0000000" (From an SQL datebase loaded into a Date datetype becoming #9/14/2011#)

<Extension()>
Public Function ToEpoch(value As Date) As Double
    Dim span As TimeSpan = (value - New Date(1970, 1, 1, 0, 0, 0, 0).ToLocalTime)
    Return span.TotalMilliseconds
End Function

И это в JavaScript

var StartDate = new Date(<%= StartDate() %>);

В результате этого вывода

var StartDate = new Date(1315922400000);

Похоже, что только для этого конкретного ввода StartDate (на стороне javascript) точно на один час.

В результате JavaScript и дата-время: Tue Sep 13 23:00:00 UTC+1000 2011

Если я введу значение, подобное Date.Now, оно будет работать правильно.

Полагаю, мне не хватает чего-то фундаментального?

Ответы [ 2 ]

4 голосов
/ 05 октября 2011

Мне кажется, что эпоха Unix - 1 января 1970 года, UTC.

В свете этого ваше создание Даты, а затем переход на местное время несколько отсталый. Что вам нужно сделать, это преобразовать значение переменной времени в UTC.

<Extension()>
Public Function ToEpoch(value As Date) As Double
    Dim span As TimeSpan = (value.ToUniversalTime - 
                                New System.DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc))
    Return span.TotalMilliseconds
End Function

Вы можете думать, что эти два преобразования эквивалентны, но они могут не быть, как объяснено в http://blogs.msdn.com/b/oldnewthing/archive/2003/10/24/55413.aspx.

3 голосов
/ 05 октября 2011

Я подозреваю, что две даты имеют разные значения летнего времени.Посмотрите, возвращают ли следующие вызовы IsDaylightSavingTime() одинаковые значения:

Dim dt As Date = new Date(2011, 9, 14)
Dim epoch As Date = new Date(1970, 1, 1)

dt.IsDaylightSavingTime()
epoch.IsDaylightSavingTime()
...