1

所以,我有一个从服务器返回的 ISO 日期时间,例如“2012-06-11T18:05”。这次是 UTC。当我将该字符串传递给 Chrome 或 IE 时,它们会给我本地时间的时间(因此,对于 CDT,它给了 01:05 PM)(这就是我想要的)。如果我将它传递给 Firefox,它会假定它已经是当地时间,它会报告当地时间下午 6:05。所以,我想我会通过执行“2012-06-11T18:05+0000”来将它的 UTC 时间添加到字符串中。这在 Chrome 和 Firefox 中效果很好,但 IE 将其报告为无效日期。

什么是跨浏览器、符合标准的方式我可以指定给定的日期时间字符串表示 UTC 时间?

4

3 回答 3

1

您可以自己解析传入的数据并使用它来构建有效的日期对象。

像这样的东西:

// input (from somewhere)
var incomingDate = "2012-06-11T18:05";
// parse Input using Regexp
var parsedIncomingDate= incomingDate.match(/^(\d{4})\-(\d{2})\-(\d{2})T(\d{2}):(\d{2})$/);
// convert parsed UTC times into ms accoring to the users browser timezone
var getUTCms = Date.UTC(parsedIncomingDate[1],parsedIncomingDate[2], parsedIncomingDate[3], parsedIncomingDate[4], parsedIncomingDate[5]); 

// ms to Date Object
var dateObj = new Date(getUTCms);

​</p>

于 2012-06-12T14:46:58.743 回答
1

如果你正在寻找一个好的日期库,我写了moment.js来解决这样的问题。它还具有自动 ISO8601 解析功能。

moment("2012-06-11T18:05"); // parse as local time
moment("2012-06-11T18:05+0000"); // parse as utc time

查看http://momentjs.com/docs/上的文档以获取有关该库可以做什么的更多示例。

于 2012-06-12T19:11:26.940 回答
0

您可以Date.UTC像这样使用方法:

var my_date = new Date(Date.UTC(2012, 5, 11, 18, 5, 0));

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/UTC

于 2012-06-12T14:41:21.507 回答