Computing milliseconds since 1970 in C# yields different date than JavaScript

三世轮回 提交于 2020-01-02 02:19:22

问题


I need to compute the JavaScript getTime method in C#.

For simplicity, I chose a fixed date in UTC and compared the C#:

C#
DateTime e = new DateTime(2011, 12, 31, 0, 0, 0, DateTimeKind.Utc);
DateTime s = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
TimeSpan t = (e - s);
var x = t.TotalMilliseconds.ToString();
=> 1325289600000

and the JavaScript results:

JavaScript
var d = new Date(2011, 12, 31, 0, 0, 0)
var utcDate = new Date(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds());
utcDate.getTime()
=> 1327960800000

Any hints on what I'm doing wrong?

Thanks!


回答1:


If you meant for the input to be at UTC, you should be doing this instead:

var ts = Date.UTC(2011,11,31,0,0,0);

As SLaks pointed out, months run 0-11, but even then - you must initialize the date as UTC if you want the response in UTC. In your code, you were initializing a local date, and then converting it to UTC. The result would be different depending on the time zone of the computer where the code is running. With Date.UTC, you get back a timestamp - not a Date object, and it will be the same result regardless of where it runs.

From Chrome's debugging console:

This is the same value returned from your .NET code, which looks just fine, except I would return a long, not a string.




回答2:


Javascript months are zero-based.
12 means January of next year.

You want 11.




回答3:


The date JS is wrong I believe. Omit the var utcDate line and output just d.getTime()

The time between two dates is the same, regardless of timezone and offset. Timezones are relative to an ACTUAL point in time, so whether you call .getTime() on the UTC or EST or PST date, it will be the same relative to 1970-1-1 of the same timezone.

2011-12-31 EST - 1970-1-1 EST 
    == 2011-12-31 PST - 1970-1-1 PST 
    == 2011-12-31 UTC - 1970-1-1 UTC

EDIT: Per @Slaks above, you also are not using the 0-based month (which I also had no idea about).



来源:https://stackoverflow.com/questions/22081128/computing-milliseconds-since-1970-in-c-sharp-yields-different-date-than-javascri

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!