我正在尝试解析safari中的日期,以便我的网站与IOS以及其他所有内容兼容,但是当我解析日期时,它只会返回NaN。
我尝试解析的日期如下所示: " 2015-06-29T23:59:59"
我已经四处寻找不同的方法,但我仍然没有找到解决这个问题的方法。
是否有人知道某个函数会在safari中解析日期或解决此问题?
最初的方法是:Date.parse(" 2015-06-29T23:59:59");
感谢。
答案 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中,所以,这是一个开始,我猜