nvd3(d3.js)日期格式返回不正确的月份

时间:2014-04-09 19:52:42

标签: date d3.js nvd3.js

我的数据如下:

[{ x="2013-06-01", y=3}, { x="2013-07-01", y=7 }, { x="2013-08-01", y=3 }]

图表x轴格式如下:

chart.xAxis
    .axisLabel('Date')
    .tickFormat(function(d) { return d3.time.format('%b %Y')(new Date(d)); })
    ;

%b分别于7月,6月,7月返回日期2013-06-01,2013-07-01,2013-08-01

为什么它会在上个月返回,我该如何解决?

编辑:如果日期格式为2013-06-02,它将返回正确的月份...有人知道发生了什么导致这个吗?

1 个答案:

答案 0 :(得分:1)

@Amelia是正确的,因为时区不同,因为如果你没有指定时间,Date默认为24:00:00。因此,如果是EDT,即-4:00,您将失去4个小时,这将使您在前一天(May 31 2013 20:00:00),并且由于您的日期中的日期为01,这会使您进入上一个一个月。

如果您的日期允许,可以绕过这个时间。

chart.xAxis
    .axisLabel('Date')
    .tickFormat(function(d) {
        d = d.split('-')
        // Create new date by using new Date(year, month, day, hour, second, ms)
        // Subtracting 1 is necessary since Javascript months are 0 - 11.
        return d3.time.format('%b %Y')(new Date(d[0], +d[1] - 1, d[2], 12, 0, 0));
    });

这是working Fiddle