所以我正在使用从基于 xml 的 api 获取的 ajax 编写应用程序。该 API 以下列格式返回日期:
2011-11-12T13:00:00-07:00
我需要将其作为标准的 JavaScript 日期对象获取
var myDate = new Date('2011-11-12T13:00:00-07:00');
在除 ie8 和 ie7 之外的所有浏览器中都运行良好。我只是不明白为什么,而且似乎找不到任何关于如何专门为 ie7-8 格式化的文档。我知道必须有一个聪明的方法来做到这一点。请帮忙。谢谢。
最佳答案
唯一聪明的方法是解析字符串并手动创建一个日期对象。这并不难:
var dateString = '2011-11-12T13:00:00-07:00';
function dateFromString(s) {
var bits = s.split(/[-T:]/g);
var d = new Date(bits[0], bits[1]-1, bits[2]);
d.setHours(bits[3], bits[4], bits[5]);
return d;
}
您可能想要设置位置的时间,因此您需要将时区偏移应用于创建的时间对象,这并不难,除了 javascript 日期对象将以分钟为单位的偏移量添加到获取 UTC 的时间,而大多数时间戳减去偏移量(即 -7:00 表示 UTC - 7 小时以获得本地时间,但 javascript 日期时区偏移量将为 +420)。
允许偏移:
function dateFromString(s) {
var bits = s.split(/[-T:+]/g);
var d = new Date(bits[0], bits[1]-1, bits[2]);
d.setHours(bits[3], bits[4], bits[5]);
// Get supplied time zone offset in minutes
var offsetMinutes = bits[6] * 60 + Number(bits[7]);
var sign = /\d\d-\d\d:\d\d$/.test(s)? '-' : '+';
// Apply the sign
offsetMinutes = 0 + (sign == '-'? -1 * offsetMinutes : offsetMinutes);
// Apply offset and local timezone
d.setMinutes(d.getMinutes() - offsetMinutes - d.getTimezoneOffset())
// d is now a local time equivalent to the supplied time
return d;
}
当然,如果您使用 UTC 日期和时间会更简单,那么您只需创建一个本地日期对象,setUTCHours,然后是日期,您就可以开始了——日期对象将执行时区操作(前提是本地系统当然已经正确设置了...)。
关于javascript - XML 日期时间到 Javascript 日期对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8178598/