这是 Safari 支持我所拥有的功能的一个特定问题,我确信这是我自己的无能为力。看,这在 Chrome 和 Firefox 中返回一个数字,但在 Safari(最新版本,7)中返回 NaN。
var something = Date.parse(new Date(dataLabels[0]));
console.log(something); // returns epoch number Chrome/Firefox NOT Safari
从这样的字符串生成纪元时间戳似乎很迟钝,但这是我可以让它在我的图表项目中工作的唯一方法,我注意到了这一点。我是否正在接近将 mm/dd/yyyy 转换为纪元错了?
...我将提交错误报告,但想先检查此处是否存在程序错误。
最佳答案
Am I approaching the translation of mm/dd/yyyy to epoch wrong?
是的。 ES5 says :
Unrecognizable Strings or dates containing illegal element values in the format String shall cause Date.parse to return NaN.
不要将日期字符串的解析留给 Date 构造函数。在 ES5 之前,字符串的解析完全依赖于实现。 ES5 中引入了 !SO 8601 的一个版本,但并非所有使用的浏览器都支持它,并且根据字符串,不同的浏览器(包括最新版本)可能会将其处理为 UTC 或本地时间。
最安全的方法是手动解析字符串。
鉴于格式为 m/d/y,以下内容将在所有浏览器中可靠地工作:
// Return a date object given a dates string in m/d/y format
function parseDate(s) {
var b = s.split(/\D+/);
return new Date(b[2], --b[0], b[1]);
}
如果您想要实际的time value ,您可以使用getTime或者只使用 unary +
operator :
var timeValue = +parseDate('5/24/2014');
请注意,当您这样做时:
> Date.parse(new Date(dataLabels[0]))
日期构造函数首先将字符串解析为日期,然后将其转换为字符串,然后将其转换回日期,然后返回时间值。因此,如果初始解析失败,其余部分也会失败,如果初始解析成功(可能会或可能不会取决于浏览器),结果将与以下内容没有什么不同:
+new Date(dataLabels[0]);
除非 Date 构造函数无法解析其自己的 Date 字符串表示形式(这是可能的,但与 ECMA-262 不一致)。
关于javascript - Safari 中的 Date.parse(new Date(...)) NaN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23440515/