这是Safari支持我所拥有的功能的一个特定问题,我确信这是我自己的无能使它变得毫无意义。看,这会在Chrome和Firefox中返回一个数字,但会在Safari中返回NaN(最新版本,7)。
var something = Date.parse(new Date(dataLabels[0]));
console.log(something); // returns epoch number Chrome/Firefox NOT Safari
从类似的字符串生成一个纪元时间戳似乎很迟钝,但这是我能够在我的图表项目中工作的唯一方法,我注意到了这一点。我接近mm / dd / yyyy到epoch的翻译错?
...我会提交一份错误报告,但是想先在此处查看编程错误。
答案 0 :(得分:3)
我是否接近将mm / dd / yyyy翻译为epoch错误?
是。 ES5 says:
无法识别包含格式为String的非法元素值的字符串或日期将导致Date.parse返回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不一致)。
答案 1 :(得分:1)
Date.parse(new Date(dataLabels[0]).toString())
应该适用于各种浏览器。以一种不那么迟钝的方式,new Date(dataLabels[0]).valueOf()
也应该具有相同的效果。 valueOf()
是toString()
等价物,它返回一个数字,而且它也得到了很好的支持。