Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript safari中的Date.parse()_Javascript_Date_Safari - Fatal编程技术网

Javascript safari中的Date.parse()

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

我试图在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不同,以下内容可能会有所帮助

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个小时的差异,这可能会给使用该函数的其他人带来问题,但时间范围较窄。无论如何,非常感谢你,你帮了我大忙。