Javascript safari中的Date.parse()
我试图在safari中解析一个日期,这样我的网站就可以与IOS以及其他任何东西兼容,但是当我解析一个日期时,它只返回NaN 我试图解析的日期如下所示: “2015-06-29T23:59:59” 我四处寻找了不同的方法来解决这个问题,但我仍然没有找到解决这个问题的方法 有谁知道一个函数可以解析safari中的日期,或者解决这个问题 最初的方法是:Date.parse(“2015-06-29T23:59:59”) 谢谢。根据safari的说法,您应该与 解析日期(“2015-06-29T23:59:59”) 也许发布一段返回NaN的代码片段,您可能做错了什么 话虽如此,如果IOS中的safari与MDN文章中提到的safari不同,以下内容可能会有所帮助Javascript safari中的Date.parse(),javascript,date,safari,Javascript,Date,Safari,我试图在safari中解析一个日期,这样我的网站就可以与IOS以及其他任何东西兼容,但是当我解析一个日期时,它只返回NaN 我试图解析的日期如下所示: “2015-06-29T23:59:59” 我四处寻找了不同的方法来解决这个问题,但我仍然没有找到解决这个问题的方法 有谁知道一个函数可以解析safari中的日期,或者解决这个问题 最初的方法是:Date.parse(“2015-06-29T23:59:59”) 谢谢。根据safari的说法,您应该与 解析日期(“2015-06-29T23:59
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中,这是一个开始,我想解析日期字符串的唯一可靠方法是手动执行,不要依赖date.parse或将字符串传递给日期构造函数(本质上是一样的) 在ECMAScript ed 5(ES5)之前,字符串的解析完全依赖于实现。ES5指定了各种ISO格式,但是使用ed 6对解析进行了进一步的更改,因此即使是ISO格式也不可靠,可能返回本地、UTC或NaN日期 字符串“2015-06-29T23:59:59”将在ES5下解析为UTC,在ed 6下解析为local,然后再进行任何处理(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]);
}
验证值并确保两位数年份需要多行:
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);
}
你看过答案了吗?@Pointy这个答案是2010年的,比ES5.1和ES6都早,所以有点过时了。@RobG是的,这很公平,我要去买一部iPhone,看看为什么safari sux:p可以在Chrome、FF、safari和IE上运行!非常感谢你!我想补充一点,即使函数工作,结果也会出错,因为函数返回的值比常规的Date.parse()要大20小时(7200000ms)。所以我修改它,不减去1,而是最后减去7180小时:return(新日期(dateBits[0],parseInt(dateBits[1]),dateBits[2],timeBits[0],timeBits[1],timeBits[2])。valueOf()-2584800000);我选择7180hours,因为这是实际答案之间的差异。如果我在parseInt(dateBits[1])之后不包含“-1”,那么不要这样做,month应该比传入的值小1。因为月份是以零为基础的,也就是说一月=0不是1,不知道为什么你会得到7200000ms(2小时不是20小时)的差异是的,我计算错了小时数,很抱歉。我重新添加了“-1”并删除了“-2584800000”。它仍然可以工作,并且仍然可以在我正在阅读的xml文档中找到正确的时间段,但这是因为时间长度是6小时,所以2小时不会有什么区别。与Date.parse(ISO8601time)相比,它仍然显示出2个小时的差异,这可能会给使用该函数的其他人带来问题,但时间范围较窄。无论如何,非常感谢你,你帮了我大忙。