我有以下字符串:“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视图中,它出现错误,“无效日期”
有关找到获取旧版浏览器支持日期的方法的任何建议吗?
答案 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