【发布时间】:2015-06-22 18:10:31
【问题描述】:
我刚刚在 2004/03/15 和 2004/04/04 之间的日期前一天在 safari 中偶然发现了 toLocaleDateString 返回日期。这是来自 safari JS 控制台的剪辑,演示了该问题:
> (new Date(2004,2,14))
< Sun Mar 14 2004 00:00:00 GMT-0600 (CST)
> (new Date(2004,2,14)).toLocaleDateString()
< "March 14, 2004"
> (new Date(2004,2,15))
< Mon Mar 15 2004 00:00:00 GMT-0500 (CDT)
> (new Date(2004,2,15)).toLocaleDateString()
< "March 14, 2004"
> (new Date(2004,3,4))
< Sun Apr 04 2004 00:00:00 GMT-0500 (CDT)
> (new Date(2004,3,4)).toLocaleDateString()
< "April 3, 2004"
> (new Date(2004,3,5))
< Mon Apr 05 2004 00:00:00 GMT-0500 (CDT)
> (new Date(2004,3,5)).toLocaleDateString()
< "April 5, 2004"
macos 和 ios 版本都存在的问题。
虽然它不是固定的,但我可以手动更正此时间间隔内的显示日期。但也许还有其他已知的糟糕的日期间隔,也需要更正?这些特定日期有什么特别之处?
[编辑] 好的,在 safari javascript 控制台中运行以下一行显示在 1900 年和 2100 年之间有超过 180 个这样的间隔。所以应该修改这个问题,处理这个问题的最佳方法是什么有问题吗?
(function(){var from,last,now; for (var y=1900; y<2100;y++) for (var m=0;m<12;m++) for (var d=1;d<32;d++) { now = new Date(y,m,d); if (Date.parse(now.toLocaleDateString())!=Date.parse(now.toString())) {if (!from) from=now;} else if (from) {console.log(from.toDateString()+'-'+last.toDateString());from=null;}last=now;}})()
[编辑 2] 结果表明,错误的间隔取决于时区设置。将 ios 上的时区从 GMT-5 更改为 GMT+12 会产生 200 个完全不同的间隔。看起来现在我正在寻找替换 safari 中 toLocaleDateString 的建议
【问题讨论】: