手动将yyyy-MM-ddTHH:mm:ss.fffZ转换为JavaScript中的DateTime [英] Convert yyyy-MM-ddTHH:mm:ss.fffZ to DateTime in JavaScript manually
问题描述
我从Webservice收到一个字符串,其日期格式为:
I receive from a Webservice a String with a date in this format:
yyyy-MM-ddTHH:mm:ss.fffZ
我需要将带有JavaScript的String转换为普通的DateTime但不使用新的日期('yyyy-MM-ddTHH:mm:ss.fffZ')
因为我使用的是不支持该转换的旧版JavaScript。我可以拆分该字符串并获得:
I need to convert that String with JavaScript to a normal DateTime but without using the new Date('yyyy-MM-ddTHH:mm:ss.fffZ')
because I'm using an old version of JavaScript that not support that conversion. I can split that string and get the:
- 年
- 月
- 天
- 时间
- Year
- Month
- Days
- Time
但如何操纵时区fffZ
有什么建议吗?
but how to manipulate the time zone "fffZ"
Any suggestions?
推荐答案
我已经建立了解决方案。请查看 http://webcloud.se/log/JavaScript-and-ISO-8601/
I've founded the solution. Please check http://webcloud.se/log/JavaScript-and-ISO-8601/
Date.prototype.setISO8601 = function (string) {
var regexp = "([0-9]{4})(-([0-9]{2})(-([0-9]{2})" +
"(T([0-9]{2}):([0-9]{2})(:([0-9]{2})(\.([0-9]+))?)?" +
"(Z|(([-+])([0-9]{2}):([0-9]{2})))?)?)?)?";
var d = string.match(new RegExp(regexp));
var offset = 0;
var date = new Date(d[1], 0, 1);
if (d[3]) { date.setMonth(d[3] - 1); }
if (d[5]) { date.setDate(d[5]); }
if (d[7]) { date.setHours(d[7]); }
if (d[8]) { date.setMinutes(d[8]); }
if (d[10]) { date.setSeconds(d[10]); }
if (d[12]) { date.setMilliseconds(Number("0." + d[12]) * 1000); }
if (d[14]) {
offset = (Number(d[16]) * 60) + Number(d[17]);
offset *= ((d[15] == '-') ? 1 : -1);
}
offset -= date.getTimezoneOffset();
time = (Number(date) + (offset * 60 * 1000));
this.setTime(Number(time));
}
这篇关于手动将yyyy-MM-ddTHH:mm:ss.fffZ转换为JavaScript中的DateTime的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!