开发者

Epoch time .NET to JavaScript (hour off?)

Using the following code in .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

And this in JavaScript

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

Resulting in this 开发者_如何学编程output

var StartDate = new Date(1315922400000);

It appears that only for this specific input the StartDate (on the javascript side) is exactly one hour off.

Resulting in the JavaScript datetime of: Tue Sep 13 23:00:00 UTC+1000 2011

If I input a value like Date.Now it appears to function correctly.

I assume I'm missing something fundamental?


Seems to me that unix epoch is Jan 1, 1970, UTC.

In light of that, your creation of the Date and then conversion to local time is somewhat backwards. What you need to do is convert the variable time value to 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

You may think the two conversions are equivalent, but they may not be, as explained in http://blogs.msdn.com/b/oldnewthing/archive/2003/10/24/55413.aspx .


I suspect the two dates have different daylight savings values. See if the following calls to IsDaylightSavingTime() return the same values:

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

dt.IsDaylightSavingTime()
epoch.IsDaylightSavingTime()
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜