自1970年以来在C#中计算的毫秒数与JavaScript不同

我需要在C#中计算JavaScript getTime方法。

为简单起见,我选择了UTC中的固定日期并比较了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 

和JavaScript结果:

 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 

关于我做错的任何暗示?

谢谢!

如果您打算将输入设置为UTC,那么您应该这样做:

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

正如SLaks指出的那样,月份运行0-11,但即便如此 – 如果你想要UTC的响应,你必须将日期初始化为UTC。 在您的代码中,您正在初始化本地日期,然后转换为UTC。 结果将根据运行代码的计算机的时区而有所不同。 使用Date.UTC ,您将获得一个时间戳 – 而不是Date对象,无论它在何处运行,它都将是相同的结果。

来自Chrome的调试控制台:

调试输出

这是从.NET代码返回的相同值,看起来很好,除了我会返回一个long ,而不是一个string

Javascript月份从零开始。
12表示明年1月。

你想要11

我认为日期JS是错误的。 省略var utcDate行并输出d.getTime()

无论时区和偏移如何,两个日期之间的时间都是相同的。 时区与ACTUAL时间点相关,因此无论您在UTC或EST或PST日期调用.getTime() ,它都将与相同时区的1970-1-1相同。

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

编辑: Per @Slaks上面,你也没有使用基于0的月份(我也不知道)。