【问题标题】:Bug in safari toLocaleDateString between 2004/03/15 and 2004/04/04. Any other dates known?2004/03/15 和 2004/04/04 之间的 safari toLocaleDateString 中的错误。还有其他日期吗?
【发布时间】: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 的建议

【问题讨论】:

    标签: ios date safari


    【解决方案1】:

    这是解决方法 - 将日期添加一个小时。也就是说,将 Date(y,m,d) 更改为 Date(y,m,d,1) 在上面的 one0liner 测试中不会产生任何输出。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-19
      • 2023-04-03
      • 1970-01-01
      • 2015-10-03
      • 2022-01-11
      • 2012-08-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多