javascript - Safari 中的 Date.parse(new Date(...)) NaN

标签 javascript arrays date safari

这是 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/

相关文章:

javascript - 使用javascript将css类添加到td标签

javascript - 处理大型数据集 PHP 与 Javascript

Java日期排序方法?

excel - 如何将 Excel 中的日期提取到 Scilab 中?

mysql - Symfony 组合 2 个查询

javascript - 为什么 map() 会改变嵌套数组中的原始对象?

javascript - Angular 7 中的访问函数

C++ 二维数组 - 数组下标的错误类型无效 ‘int[int]’

python - 在行 [NumPy 或 Tensorflow] 的索引值之前将行中的值设置为零

java - 我怎样才能摆脱这个 ClassCastException? ( java )