我需要在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
我做错了什么提示?
谢谢!
答案 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的调试控制台:
这是从.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的月份(我也不知道)。