1

我有以下字符串:“2012-12-10T23:40:41Z”

我的目标是将这一天作为一个数字(0-6)... sun-sat

我按如下方式传递此字符串:

var input = "2012-12-10T23:40:41Z";
var day = new Date(input).getDay();
alert(day);

这在 Chrome 中工作得很好,但在 adobe air webkit 视图中,它会出现“无效日期”错误

关于找到一种方法来获得旧浏览器支持的一天的任何建议?

4

3 回答 3

4

在 ES5 之前,没有标准的日期解析方式(每个主机都实现了自己的解析方式)。从 ES5 开始,日期必须采用 ISO8601 格式才能在严格模式下解析。

为了获得最大的可移植性,您应该手动解析日期。

于 2012-12-11T01:44:44.817 回答
0

这个页面应该很有帮助,即使它有点旧。问题是 ISO 8601 样式日期仅在 Javascript 1.8.5 中得到支持。

于 2012-12-11T01:47:55.670 回答
0

更多的评论。

要手动解析javascript ISO8601 日期字符串,请将其拆分为多个部分并将其传递给日期构造函数。请注意,javascript 日期字符串应始终为 UTC (Z),因此:

function parseISOdateString(s) {
  s = s.split(/\D/);
  return new Date(Date.UTC(s[0], --s[1], s[2], s[3], s[4], s[5]))
}

如果您愿意,您可以在上面添加花里胡哨来验证字符串和生成的日期对象。

请注意,根据 ES5,给定的无效日期字符串Date.parse(例如 2012-12-00)应该返回NaN,但一些浏览器会为 2012-11-30 创建一个日期对象。以上将返回无效字符串的日期对象,因此如果需要与规范保持一致:

function parseISOdateString(s) {
  s = s.split(/\D/);
  var d = new Date(Date.UTC(s[0], --s[1], s[2], s[3], s[4], s[5]))
  return (d.getUTCFullYear() == s[0] && d.getUTCDate() == s[2])? d : NaN;
}

这将返回NaN无效字符串,如“2012-12-00”

于 2012-12-11T02:34:18.870 回答