Ang*_* R. 3 javascript timestamp iso8601
在处理从iso8061日期获取时间戳时,我遇到了一些问题.出于某种原因,它在Chrome中完美运行,但在Firefox中导致无效日期错误.确切的行是:
var date = new Date(time.replace(/-/g,"/").replace(/[TZ]/g," "));
Run Code Online (Sandbox Code Playgroud)
我已经尝试传递日期(作为var时间)2011-03-09T16:46:58+00:00,2011-03-09T16:46:58+0000并2011-03-09T16:48:37Z按照http://www.jibbering.com/faq/#dates的规格,但我仍然无法让它在Firefox中工作.实际上,最后一种方法在两种浏览器中都不起作用.
如果有人可以帮助我将这个iso8061日期转换为时间戳,那就太棒了.
谢谢,Angelo R.
看一下JavaScript ISO8601/RFC3339 Date Parser:
他们的代码:
Date.prototype.setISO8601 = function(dString){
var regexp = /(\d\d\d\d)(-)?(\d\d)(-)?(\d\d)(T)?(\d\d)(:)?(\d\d)(:)?(\d\d)(\.\d+)?(Z|([+-])(\d\d)(:)?(\d\d))/;
if (dString.toString().match(new RegExp(regexp))) {
var d = dString.match(new RegExp(regexp));
var offset = 0;
this.setUTCDate(1);
this.setUTCFullYear(parseInt(d[1],10));
this.setUTCMonth(parseInt(d[3],10) - 1);
this.setUTCDate(parseInt(d[5],10));
this.setUTCHours(parseInt(d[7],10));
this.setUTCMinutes(parseInt(d[9],10));
this.setUTCSeconds(parseInt(d[11],10));
if (d[12]) {
this.setUTCMilliseconds(parseFloat(d[12]) * 1000);
}
else {
this.setUTCMilliseconds(0);
}
if (d[13] != 'Z') {
offset = (d[15] * 60) + parseInt(d[17],10);
offset *= ((d[14] == '-') ? -1 : 1);
this.setTime(this.getTime() - offset * 60 * 1000);
}
}
else {
this.setTime(Date.parse(dString));
}
return this;
};
Run Code Online (Sandbox Code Playgroud)
然后你可以这样使用它:
var today = new Date();
today.setISO8601('2008-12-19T16:39:57.67Z');
Run Code Online (Sandbox Code Playgroud)
可能不那么舒服,但您可以重写此功能,或者编写另一个将根据ISO-8601格式返回日期的功能
| 归档时间: |
|
| 查看次数: |
2825 次 |
| 最近记录: |