某些浏览器中的无效日期的getDay()错误

时间:2012-12-11 01:40:28

标签: javascript jquery air

我有以下字符串:“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视图中,它出现错误,“无效日期”

有关找到获取旧版浏览器支持日期的方法的任何建议吗?

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:0)

page应该证明是有用的,即使它有点旧。问题是ISO 8601样式日期仅在Javascript 1.8.5中得到支持。

答案 2 :(得分:0)

更多评论。

要手动解析javascript ISO8601 date string,请将其拆分为多个部分并将其传递给日期构造函数。请注意,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;
}

对于“2012-12-00”等无效字符串,将返回NaN