作为我想要帮助的问题的后续问题:javascript date.parse difference in chrome and other browsers
我需要帮助更新我在这里找到的正则表达式:
JavaScript: Which browsers support parsing of ISO-8601 Date String with Date.parse
处理2011-11-24T09:00:27+0200
目前只应该处理ISO日期的2011-11-24T09:00:27Z
版本
即。
中的rxfunction(s){
var day, tz,
rx= /^(\d{4}\-\d\d\-\d\d([tT][\d:\.]*)?)([zZ]|([+\-])(\d\d):(\d\d))?$/,
p= rx.exec(s) || [];
if(p[1]){
day= p[1].split(/\D/).map(function(itm){
return parseInt(itm, 10) || 0;
});
day[1]-= 1;
day= new Date(Date.UTC.apply(Date, day));
if(!day.getDate()) return NaN;
if(p[5]){
tz= parseInt(p[5], 10)*60;
if(p[6]) tz += parseInt(p[6], 10);
if(p[4]== "+") tz*= -1;
if(tz) day.setUTCMinutes(day.getUTCMinutes()+ tz);
}
return day;
}
return NaN;
}
使this fiddle能够与IE和Safari一起使用
更新:答案有效。现在我可以帮助其他人解析从facebook API返回的ISO日期。
答案 0 :(得分:12)
要使其适用格式2011-11-24T09:00:27+0200
的日期,只需在最后?
之后添加:
,例如:
/^(\d{4}\-\d\d\-\d\d([tT][\d:\.]*)?)([zZ]|([+\-])(\d\d):?(\d\d))?$/
说明:
(
\d{4}\-\d\d\-\d\d # date
([tT][\d:\.]*)? # optional time
)
(
[zZ] # UTC time zone
| # or
([+\-]) # offset sign
(\d\d) # hour offset
:? # optional delimiter
(\d\d) # minute offset
)? # time zone is optional
其余的代码不需要任何更改,并且该函数以前支持的所有格式仍然有效(与之前的答案不同,它会打破四位数偏移)。
答案 1 :(得分:2)
我不确定你想要什么,但你的正则表达式是错误的,尝试更改结尾,使它看起来像/^(\d{4}\-\d\d\-\d\d([tT][\d:\.]*)?)([zZ]|([+\-])(\d{3}))?$/
,它至少会匹配你正在寻找的东西。
原始正则表达式查找了一个字符,z
或Z
,或+
或-
后跟2位数字,冒号,然后是2位数字,我更改了它,而不是寻找2位数,一个冒号和2位数,它在你的例子中寻找3位数。