D3 DateTime解析器考虑了时区



我有这个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对象)

值"GMT+0100(GMT夏令时)"是Windows表示"英国夏令时"(或BST)的有趣方式。2009年,英国夏令时从3月29日到10月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的时间格式化文档。

相关内容

  • 没有找到相关文章

最新更新