Date.parse() 在野生动物园中
Date.parse() in safari
我正在尝试解析 safari 中的日期,以便我的网站与 IOS 以及其他所有内容兼容,但是当我解析日期时,它仅 returns NaN。
我尝试解析的日期如下所示:
“2015-06-29T23:59:59”
我四处寻找不同的方法来做到这一点,但我仍然没有找到解决这个问题的方法。
有没有人知道可以解析 safari 中的日期的函数或解决此问题的方法?
原来的做法是:Date.parse("2015-06-29T23:59:59");
谢谢。
根据 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse safari 应适用于
Date.parse("2015-06-29T23:59:59");
也许 post 一个 returns 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");
Returns 与
相同的值
Date.parse("2015-06-29T23:59:59");
在 firefox 中,所以,我想这是一个开始
解析日期字符串的唯一可靠方法是手动执行,不要依赖 Date.parse 或将字符串传递给 Date 构造函数(本质上是同样的事情)。
在 ECMAScript ed 5 (ES5) 之前,字符串的解析完全依赖于实现。 ES5 指定了各种 ISO 格式,但是使用 ed 6 进行解析有进一步的更改,因此即使是 ISO 格式也不可靠并且可能 return 本地、UTC 或 NaN 日期。
字符串“2015-06-29T23:59:59”将在 ES5 下被解析为 UTC,在 ed 6 下被解析为本地时间,在此之前任何事情都会发生(IE8 returns 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);
}
我正在尝试解析 safari 中的日期,以便我的网站与 IOS 以及其他所有内容兼容,但是当我解析日期时,它仅 returns NaN。
我尝试解析的日期如下所示: “2015-06-29T23:59:59”
我四处寻找不同的方法来做到这一点,但我仍然没有找到解决这个问题的方法。
有没有人知道可以解析 safari 中的日期的函数或解决此问题的方法?
原来的做法是:Date.parse("2015-06-29T23:59:59");
谢谢。
根据 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse safari 应适用于
Date.parse("2015-06-29T23:59:59");
也许 post 一个 returns 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");
Returns 与
相同的值Date.parse("2015-06-29T23:59:59");
在 firefox 中,所以,我想这是一个开始
解析日期字符串的唯一可靠方法是手动执行,不要依赖 Date.parse 或将字符串传递给 Date 构造函数(本质上是同样的事情)。
在 ECMAScript ed 5 (ES5) 之前,字符串的解析完全依赖于实现。 ES5 指定了各种 ISO 格式,但是使用 ed 6 进行解析有进一步的更改,因此即使是 ISO 格式也不可靠并且可能 return 本地、UTC 或 NaN 日期。
字符串“2015-06-29T23:59:59”将在 ES5 下被解析为 UTC,在 ed 6 下被解析为本地时间,在此之前任何事情都会发生(IE8 returns 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);
}