这是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转换为纪元错误?

...我将提交错误报告,但想首先在此处检查程序错误。

最佳答案

我是否正在将mm / dd / yyyy转换为时代错误?


是。 ES5 says


  无法识别的字符串或包含字符串格式的非法元素值的日期将导致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不兼容)。

07-28 09:20
查看更多