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

时间:2014-02-27 21:43:12

标签: c# javascript datetime datetime-format

我需要在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

我做错了什么提示?

谢谢!

3 个答案:

答案 0 :(得分:10)

Javascript月份为零 12表示明年1月。

您想要11

答案 1 :(得分:1)

如果您的意思是输入为UTC,那么您应该这样做:

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

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

从Chrome的调试控制台:

Debug Output

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

答案 2 :(得分:0)

日期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

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