alert(new Date('2010-11-29'));

Chrome, ff在这方面没有问题,但safari会喊“无效日期”。为什么?

编辑:好的,根据下面的评论,我使用了字符串解析,并尝试了这个:

alert(new Date('11-29-2010')); //doesn't work in safari
alert(new Date('29-11-2010')); //doesn't work in safari
alert(new Date('2010-29-11')); //doesn't work in safari

编辑2018年3月22日:似乎人们仍然在这里着陆-今天,我会使用moment或date-fns,然后就不用了。Date-fns是非常痛苦的,而且很轻。


当前回答

使用'mm/dd/yyyy'格式。例如:- new Date('02/28/2015')。它在所有浏览器中都运行良好。

其他回答

使用'mm/dd/yyyy'格式。例如:- new Date('02/28/2015')。它在所有浏览器中都运行良好。

在我的情况下,它不是格式,这是因为在我的后端Node.js模型中,我将数据库变量定义为字符串而不是日期。

我的后端节点数据库模型说:

starttime:{
  type: String,
}

而不是正确的:

 starttime:{
    type: Date,
  }

对我来说,仅仅因为Safari不能正确地执行一个新库就实现了太多,而正则表达式则是多余的。 这是一句简单的话:

console.log (new Date('2011-04-12'.replace(/-/g, "/")));

尽管您可能希望浏览器支持ISO 8601(或仅限日期的子集),但事实并非如此。我所知道的所有浏览器(至少在我使用的美国/英语地区)都能够解析可怕的美国MM/DD/YYYY格式。

如果已经有了日期的部分,则可能希望尝试使用date . utc()。如果你没有,但你必须使用YYYY-MM-DD格式,我建议使用正则表达式来解析你知道的片段,然后将它们传递给Date.UTC()。

在Safari中也面临同样的问题,它通过在网页中插入这个解决了

 <script src="https://cdn.polyfill.io/v2/polyfill.min.js?features=Intl.~locale.en"></script> 

希望它也会对你的案子起作用

谢谢