Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ECMAScript 5 Date.parse ISO 8601测试用例的结果_Javascript_Datetime_Iso_Ecmascript 5_Iso8601 - Fatal编程技术网

Javascript ECMAScript 5 Date.parse ISO 8601测试用例的结果

Javascript ECMAScript 5 Date.parse ISO 8601测试用例的结果,javascript,datetime,iso,ecmascript-5,iso8601,Javascript,Datetime,Iso,Ecmascript 5,Iso8601,以下测试用例的正确结果是什么 //Chrome 19 Opera 12 Firefox 11 IE 9 Safari 5.1.1 console.log(Date.parse("2012-11-31T23:59:59.000Z"));//1354406399000 NaN NaN 1354406399000

以下测试用例的正确结果是什么

                                                    //Chrome 19     Opera 12       Firefox 11    IE 9          Safari 5.1.1
console.log(Date.parse("2012-11-31T23:59:59.000Z"));//1354406399000 NaN            NaN           1354406399000 NaN
console.log(Date.parse("2012-12-31T23:59:59.000Z"));//1356998399000 1356998399000  1356998399000 1356998399000 1356998399000
console.log(Date.parse("2012-12-31T23:59:60.000Z"));//NaN           NaN            NaN           NaN           1356998400000
console.log(Date.parse("2012-04-04T05:02:02.170Z"));//1333515722170 1333515722170  1333515722170 1333515722170 1333515722170
console.log(Date.parse("2012-04-04T24:00:00.000Z"));//NaN           1333584000000  1333584000000 1333584000000 1333584000000
console.log(Date.parse("2012-04-04T24:00:00.500Z"));//NaN           NaN            1333584000500 1333584000500 NaN
console.log(Date.parse("2012-12-31T10:08:60.000Z"));//NaN           NaN            NaN           NaN           1356948540000
console.log(Date.parse("2012-13-01T12:00:00.000Z"));//NaN           NaN            NaN           NaN           NaN
console.log(Date.parse("2012-12-32T12:00:00.000Z"));//NaN           NaN            NaN           NaN           NaN
console.log(Date.parse("2012-12-31T25:00:00.000Z"));//NaN           NaN            NaN           NaN           NaN
console.log(Date.parse("2012-12-31T24:01:00.000Z"));//NaN           NaN            NaN           1356998460000 NaN
console.log(Date.parse("2012-12-31T12:60:00.000Z"));//NaN           NaN            NaN           NaN           NaN
console.log(Date.parse("2012-12-31T12:00:60.000Z"));//NaN           NaN            NaN           NaN           1356955260000
console.log(Date.parse("2012-00-31T23:59:59.000Z"));//NaN           NaN            NaN           NaN           NaN
console.log(Date.parse("2012-12-00T23:59:59.000Z"));//NaN           NaN            NaN           NaN           NaN
console.log(Date.parse("2012-02-29T12:00:00.000Z"));//1330516800000 1330516800000  1330516800000 1330516800000 1330516800000
console.log(Date.parse("2011-02-29T12:00:00.000Z"));//1298980800000 NaN            NaN           1298980800000 NaN
console.log(Date.parse("2011-03-01T12:00:00.000Z"));//1298980800000 1298980800000  1298980800000 1298980800000 1298980800000

// extended years:
console.log(Date.parse("0000-01-01T00:00:00.000Z"));//-621672192e5  -621672192e5   -621672192e5  -621672192e5  -621672192e5
console.log(Date.parse("+275760-09-13T00:00:00.000Z"));//8.64e15    NaN            8.64e15       8.64e15       8.64e15
console.log(Date.parse("-271821-04-20T00:00:00.000Z"));//-8.64e15   NaN            -8.64e15      -8.64e15      -8.6400000864e15
console.log(Date.parse("+275760-09-13T00:00:00.001Z"));//NaN        NaN            NaN           8.64e15 + 1   8.64e15 + 1
console.log(Date.parse("-271821-04-19T23:59:59.999Z"));//NaN        NaN            NaN           -8.64e15 - 1  -8.6400000864e15 - 1

// https://github.com/kriskowal/es5-shim/issues/80 Safari bug with leap day
console.log(Date.parse("2034-03-01T00:00:00.000Z") -
            Date.parse("2034-02-27T23:59:59.999Z"));//86400001      86400001       86400001       86400001      1

// Time Zone Offset
console.log(Date.parse("2012-01-29T12:00:00.000+01:00"));//132783480e4 132783480e4  132783480e4  132783480e4    132783480e4
console.log(Date.parse("2012-01-29T12:00:00.000-00:00"));//132783840e4 132783840e4  132783840e4  132783840e4    132783840e4
console.log(Date.parse("2012-01-29T12:00:00.000+00:00"));//132783840e4 132783840e4  132783840e4  132783840e4    132783840e4
console.log(Date.parse("2012-01-29T12:00:00.000+23:59"));//132775206e4 132775206e4  132775206e4  132775206e4    132775206e4
console.log(Date.parse("2012-01-29T12:00:00.000-23:59"));//132792474e4 132792474e4  132792474e4  132792474e4    132792474e4
console.log(Date.parse("2012-01-29T12:00:00.000+24:00"));//NaN         1327752e6    NaN          1327752000000  1327752000000
console.log(Date.parse("2012-01-29T12:00:00.000+24:01"));//NaN         NaN          NaN          1327751940000  1327751940000
console.log(Date.parse("2012-01-29T12:00:00.000+24:59"));//NaN         NaN          NaN          1327748460000  1327748460000
console.log(Date.parse("2012-01-29T12:00:00.000+25:00"));//NaN         NaN          NaN          NaN            NaN
console.log(Date.parse("2012-01-29T12:00:00.000+00:60"));//NaN         NaN          NaN          NaN            NaN
console.log(Date.parse("-271821-04-20T00:00:00.000+00:01"));//NaN      NaN          NaN          -864000000006e4 -864000008646e4
console.log(Date.parse("-271821-04-20T00:01:00.000+00:01"));//-8.64e15 NaN          -8.64e15     -8.64e15        -864000008640e4

似乎ECMAScript应该更具体地用于边缘情况;目前is说无效的日期格式取决于实现,对吗?

根据ES5规范,将仅适用于有效日期。其他任何东西都依赖于实现(实际上,IE<9不适用于标准ISO日期,它需要一个“/”分隔符)。所以,如果你给它一个无效的日期(比如2012-11-31),你可以得到从2012-12-01到错误的任何信息

在您的测试中:

2012-12-31T23:59:60.000Z
虽然可能不像你期望的那样,但应该可以。用60秒表示闰秒,这并不等同于24:00:00,只有Safari似乎能做到这一点

此外:

应该可以,它表示2012年4月4日午夜,所以Firefox在那里出错了

ES5实现应该支持的格式在中

哦,您可能还应该测试“T”的省略(因为在某些情况下它是可选的,我认为包括浏览器)和不同的时区,例如:

2012-04-03 23:50:00+10:00
2012-04-03 23:50:00-04:15
2012-04-03 23:50:00+10
20120403T235000+1000

YYYYDDD和yyywwd格式也是如此,尽管不需要实现来支持它们。

看来,ES5应该更具体地表示无效dates@4esn0k-这取决于你所说的无效日期。
新日期(2012,1,30)
的结果等同于2012-02-30,并生成2012年3月1日的日期对象。
Date.parse('2012-02-30')
也应该这样做吗?这就是我建议手动解析日期的一个原因,这是唯一能确切知道在所有浏览器中如何处理日期的方法。另一个原因是使用中的浏览器不符合ES5的最低要求,因此即使是有效的ISO8601日期字符串也不安全。
2012-04-03 23:50:00+10:00
2012-04-03 23:50:00-04:15
2012-04-03 23:50:00+10
20120403T235000+1000