XML日期时间到Javascript日期对象

XML DateTime to Javascript Date Object

本文关键字:日期 对象 Javascript 时间 XML      更新时间:2023-09-26

所以我正在使用ajax从基于xml的api获取一个应用程序。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 - 7hrs以获得本地时间,但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日期和时间,它会更简单,然后你只需要创建一个本地日期对象,settutchours,然后date,你就可以开始了- date对象将做时区的事情(当然,前提是本地系统有正确的设置…)

似乎应该在Date()和格式化的MSDN文档中工作。

这个怎么样?

var millisecsSince1970 = Date.parse('2011-11-12T13:00:00-07:00');
var date = new Date(millisecsSince1970);