在safari中的Date.parse()

时间:2015-06-30 12:04:01

标签: javascript date safari

我正在尝试解析safari中的日期,以便我的网站与IOS以及其他所有内容兼容,但是当我解析日期时,它只会返回NaN。

我尝试解析的日期如下所示: " 2015-06-29T23:59:59"

我已经四处寻找不同的方法,但我仍然没有找到解决这个问题的方法。

是否有人知道某个函数会在safari中解析日期或解决此问题?

最初的方法是:Date.parse(" 2015-06-29T23:59:59");

感谢。

2 个答案:

答案 0 :(得分:1)

解析日期字符串的唯一可靠方法是手动执行,不依赖于 Date.parse 或将字符串传递给Date构造函数(这基本上是相同的事情)。

在ECMAScript第5版(ES5)之前,字符串的解析完全取决于实现。 ES5指定了各种ISO格式,但是使用ed 6进行解析还有进一步的变化,因此即使ISO格式也不可靠,可能会返回本地,UTC或NaN日期。

字符串“2015-06-29T23:59:59”将在ES5下解析为UTC,在本地第6版之前,然后任何事情都会发生(IE8返回NaN,那个时代的其他浏览器也可能)。

一个简单的解析器,假设es 6行为和本地时区是:

function parseISO(s) {
  var b = s.split(/\D/);
  return new Date(b[0], b[1]-1, b[2], b[3], b[4], b[5]);
}

验证值并确保2位数年份需要更多行:

function parseISO(s) {
  var b = s.split(/\D/);
  var d = new Date(b[0], b[1]-1, b[2], b[3], b[4], b[5]);
  d.setFullYear(b[0]);
  return d && d.getMinutes() == b[4] && d.getMonth() == b[1]-1 && d.getDate() == b[2]? d : new Date(NaN);
}

答案 1 :(得分:0)

根据https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse safari应该使用

Date.parse( “2015-06-29T23:59:59”);

也许发布一个返回NaN的代码片段,你可能做错了什么

话虽如此,如果IOS中的safari与MDN文章中提到的safari不同,以下内容可能会有所帮助

function parseDate(s) {
    var dateTime = s.split('T');
    var dateBits = dateTime[0].split('-');
    var timeBits = dateTime[1].split(':');
    return new Date(dateBits[0], parseInt(dateBits[1]) - 1, dateBits[2], timeBits[0], timeBits[1], timeBits[2]).valueOf();
}

parseDate("2015-06-29T23:59:59");

返回与

相同的值
Date.parse("2015-06-29T23:59:59");

在Firefox中,所以,这是一个开始,我猜