javascript - XML 日期时间到 Javascript 日期对象

标签 javascript xml datetime utc

所以我正在使用从基于 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/

相关文章:

javascript - 触发嵌套点击事件

java - 回车换行 XML - Java

xml - Powershell 替换 XML 文件中的值

php - 为什么要使用 TIMESTAMP 而不是 INT 值?

java - 找出 YearMonth 实例的最后一天(在 LocalDate 中) - joda 库

mysql - 如何在mysql中获取日期时间以及附加的GMT?

javascript - 如何使我的网页能够仅嵌入 URL?

javascript - 如何在javascript中获取URL数组参数

javascript - __doPostBack on 事件仅有效一次

java - xml节点的文本值到java