Chrome / Firefox和IE在javascript Date()计算中的差异

时间:2019-07-18 17:18:05

标签: javascript google-chrome datetime internet-explorer-11

刚注意到IE为日期值输入了一个不同的数字,如下所示:

new Date("01 Apr 1940 23:59:59").valueOf()
-938826001000

new Date("31 Mar 1900 00:00:01").valueOf()
-2201302799000

Chrome和Firefox的输出相同:

new Date("01 Apr 1940 23:59:59").valueOf()
-938826001000
new Date("31 Mar 1900 00:00:01").valueOf()
-2201299199000 

两种情况下第一个数字相同,但是两种情况下第二个数字不同。

当我使用

对这两个日期之间的小时数做datediff时
trunc((a-b)/3600000)

Internet Explorer提供的数字与c#和Vb.net一致,而chrome / ff则是一个小时。

这是firefox和chrome中的错误,还是IE和c#/ vb中的错误?还是我错过了什么:)

谢谢

还有更多差异示例

new Date("01 Apr 1960 23:59:59").valueOf()  // IE
-307674001000

new Date("01 Apr 1960 23:59:59").valueOf()  // CHROME
-307670401000

我尝试了1962、1964、1966、1968、1970、1980,它们在两种浏览器中都相同,只有1960年有所不同。

?new Date("01 Apr 1960 23:59:59").valueOf() + " cr"
"-307670401000 cr" -  DIFFERENT
?new Date("01 Apr 1962 23:59:59").valueOf() + " cr"
"-244602001000 cr"
?new Date("01 Apr 1964 23:59:59").valueOf() + " cr"
"-181443601000 cr"
?new Date("01 Apr 1966 23:59:59").valueOf() + " cr"
"-118371601000 cr"
?new Date("01 Apr 1968 23:59:59").valueOf() + " cr"
"-55213201000 cr"
?new Date("01 Apr 1970 23:59:59").valueOf() + " cr"
"7858799000 cr"

?new Date("01 Apr 1960 23:59:59").valueOf() + " ie"
"-307674001000 ie" -  DIFFERENT
?new Date("01 Apr 1962 23:59:59").valueOf() + " ie"
"-244602001000 ie"
?new Date("01 Apr 1964 23:59:59").valueOf() + " ie"
"-181443601000 ie"
?new Date("01 Apr 1966 23:59:59").valueOf() + " ie"
"-118371601000 ie"
?new Date("01 Apr 1968 23:59:59").valueOf() + " ie"
"-55213201000 ie"
?new Date("01 Apr 1970 23:59:59").valueOf() + " ie"
"7858799000 ie"

1 个答案:

答案 0 :(得分:1)

您会遇到时区处理方面的差异。如果您提供带有tz偏移量信息的完全限定日期:

new Date("1900-03-31T00:00:01.000+00:00").valueOf()

实现了一致性。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse#Date_Time_String_Format