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


当前回答

将字符串转换为日期格式(你必须知道服务器时区)

new Date('2015-06-16 11:00:00'.replace(/\s+/g, 'T').concat('.000+08:00')).getTime()  

where +08:00 =时区从服务器

其他回答

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

使用下面的格式,它可以在所有浏览器上工作

var year = 2016;
var month = 02;           // month varies from 0-11 (Jan-Dec)
var day = 23;

month = month<10?"0"+month:month;        // to ensure YYYY-MM-DD format
day = day<10?"0"+day:day;

dateObj = new Date(year+"-"+month+"-"+day);

alert(dateObj); 

//你的输出看起来像这样“周三3月23日00:00:00 GMT+0530 (IST)”

//注意这将是在当前时区,在这种情况下由IST表示,转换为UTC时区,你可以包括

alert(dateObj.toUTCSting);

//你现在的输出是这样的“Tue, 22 march 2016 18:30:00 GMT”

请注意,现在dateObj以GMT格式显示时间,还请注意日期和时间已相应更改。

“toUTCSting”函数检索格林尼治子午线上的相应时间。它通过建立当前时区与格林威治子午线时区之间的时差来实现这一点。

在上面的例子中,转换前的时间是2016年3月23日00:00小时和分钟。在将GMT+0530 (IST)小时转换为GMT(在这种情况下,它基本上从给定的时间戳中减去5.30小时)后,时间反映了2016年3月22日的18.30小时(正好比第一次时间晚5.30小时)。

进一步将任何日期对象转换为您可以使用的时间戳

alert(dateObj.getTime());

//输出类似于"1458671400000"

这将为您提供时间的唯一时间戳

我用矩来解决这个问题。 例如

var startDate = moment('2015-07-06 08:00', 'YYYY-MM-DD HH:mm').toDate();

我在Safari浏览器中也遇到了同样的问题

var date = new Date("2011-02-07");
console.log(date) // IE you get ‘NaN’ returned and in Safari you get ‘Invalid Date’

解决方案如下:

var d = new Date(2011, 01, 07); // yyyy, mm-1, dd  
var d = new Date(2011, 01, 07, 11, 05, 00); // yyyy, mm-1, dd, hh, mm, ss  
var d = new Date("02/07/2011"); // "mm/dd/yyyy"  
var d = new Date("02/07/2011 11:05:00"); // "mm/dd/yyyy hh:mm:ss"  
var d = new Date(1297076700000); // milliseconds  
var d = new Date("Mon Feb 07 2011 11:05:00 GMT"); // ""Day Mon dd yyyy hh:mm:ss GMT/UTC 

这不是最好的解决方案,尽管我只是捕获错误并返回当前日期。我个人觉得不解决Safari的问题,如果用户想要使用一个该死的不符合标准的浏览器——他们就得忍受这些怪癖。

function safeDate(dateString = "") {
  let date = new Date();
  try {
    if (Date.parse(dateString)) {
      date = new Date(Date.parse(dateString))
    }
  } catch (error) {
    // do nothing.
  }
  return date;
}

我建议让你的后端发送ISO日期。