我有这个URL,我需要解析并将mydate
时间戳转换为UTC日期时间(在Javascript中)。
http://www.blablabla.com/#mydate=2009-10-12T22:09:28.000
显然,URL中编码的日期只是字符串,因此它不会传达任何时区信息:但它代表的是UTC时间。
将UTC时间戳字符串转换为UTC日期时间似乎非常简单但是我遇到了这个问题:
我使用D3时间解析器来完成它,这里重要的一点:
var iso = d3.time.format.utc("%Y-%m-%dT%H:%M:%S.%L");
var dateObj = iso.parse(mydate);
mydate
是一个字符串,它只是包含时间戳位的URL的剪辑版本:
2009-10-12T22:09:28.000
.parse
函数的输出是:
Mon Oct 12 2009 23:09:28 GMT+0100 (GMT Daylight Time)
我已经预料到了这一点(这就是我想要的):
Mon Oct 12 2009 22:09:28
操作系统和浏览器设置为UTC时间(此处我们目前处于GMT状态)。 那么为什么我得到(GMT日光时间)部分而不是普通的UTC字符串?
修改
即使使用简单的new Date(2009, 9, 12, 22, 09, 28)
,我也会遇到同样的问题(没有D3,没有MomentJS,只是一个普通的JavaScript DateTime对象)
答案 0 :(得分:2)
价值" GMT + 0100(GMT日光时间)"是Windows的有趣说法"英国夏令时" (或,BST)。 In 2009, BST ran from March 29 to October 25,因此您的10月12日日期就在那个范围内。
您的时区未设置为"(UTC) Coordinated Universal Time"
,而是设置为"(UTC) Dublin, Edinburgh, Lisbon, London"
。括号中的值仅表示标准偏移量。它没有反映夏令时。
最后,输出实际上是Date
对象,而不是字符串。 JavaScript Date
对象根据运行它的计算机的时区以本地时间表示其大部分输出。如果您想要UTC时间,那么您可以使用.toISOString()
代替.toString()
,但这将采用ISO 8601扩展格式,而不是人类可读的格式。
如果您想要一种人类可读的基于UTC的格式,因为您已经使用过D3,请执行以下操作:
var iso = d3.time.format.utc("%Y-%m-%dT%H:%M:%S.%L");
var dateObj = iso.parse(mydate);
var fmt = d3.time.format.utc("%c"); // or whatever format you wish
var str = fmt.format(dateObj);
有关详细信息,请参阅D3's time formatting documentation。