var startDate = new Date('2013-05-13');
var date_format = d3.time.format("%m/%d");
如果我做
startDate = date_format(startDate);
我得到的是“ 05/12”而不是“ 05/13”。有人知道为什么会这样吗?
最佳答案
不要使用Date(string) constructor来解析日期;随浏览器的不同而不同。 “ 2013-05-13”最可能(但不能保证)的解释是UTC时间中的ISO8601字符串。因此,如果您在JavaScript控制台中运行语句,则会看到:
> new Date("2013-05-13")
Sun May 12 2013 17:00:00 GMT-0700 (PDT)
日期构造将字符串以UTC时间解释,而返回的Date对象以本地时间解释。 UTC 5月13日午夜是美国太平洋标准时间5月12日下午5点,因此,使用d3.time.format在本地时间对其进行格式化时,您将在5月12日返回。
您可以切换为使用
d3.time.format.utc("%m/%d")
设置日期格式,但是仍然依赖于Date(string)构造函数的歧义行为。所以与其…按照@minikomi的建议,您可以创建d3.time.format来解析日期字符串:
d3.time.format("%Y-%m-%d")
,然后是format.parse("2013-05-13")
。或者,您可以使用多参数Date构造函数:new Date(2013, 4, 13)
,但请注意,月份从零开始而不是通常的一月。关于javascript - 使用D3.time.format进行解析时,date对象返回不同的日期,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16555023/