在浏览器中将日期字符串解释为相同

时间:2012-06-12 14:30:17

标签: javascript internet-explorer firefox google-chrome

所以,我的服务器有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时间?

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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/处的文档,了解库可以执行的更多示例。

答案 2 :(得分: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