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是非常痛苦的,而且很轻。


当前回答

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

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

其他回答

要让解决方案在大多数浏览器上都能工作,您应该使用这种格式创建日期对象

(year, month, date, hours, minutes, seconds, ms)

例如:

dateObj = new Date(2014, 6, 25); //UTC time / Months are mapped from 0 to 11
alert(dateObj.getTime()); //gives back timestamp in ms

工作良好的IE, FF, Chrome和Safari。甚至是更老的版本。

IE开发中心:日期对象(JavaScript)

Mozilla Dev Network:日期

“劫持约会”和“固定约会”怎么样?无依赖,min + gzip = 280 B

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

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

starttime:{
  type: String,
}

而不是正确的:

 starttime:{
    type: Date,
  }

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

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

最好的方法是使用以下格式:

new Date(year, month, day, hours, minutes, seconds, milliseconds)
var d = new Date(2018, 11, 24, 10, 33, 30, 0);

这在所有浏览器中都是受支持的,不会给您带来任何问题。 请注意,月份是从0到11。