d3.max返回错误的日期

时间:2015-09-07 09:07:19

标签: javascript date d3.js max

我有一个奇怪的问题。我正在加载概述页面的数据。我需要显示最大日期,以便用户知道他们正在处理的时间段。现在,我知道这应该是哪个日期(今天或昨天的日期,这会每晚更新一次),但我还是想做一个最大功能,以防万一在更新过程中出现问题。

我遇到的问题是d3.max和自定义最大日期函数都返回错误的日期。未来一个月,今天应该显示2015年7月9日,但它显示2015年7月10日。当我在7/10过滤数据时,我得到一个空数组。在小提琴这个工作正常,所以有一些可疑的事情发生。我确实运行了d3.tsv(tsv是正确的,即使扩展名为.csv,文件实际上是以tab分隔的),可能会出现问题吗?我可能会出错的任何想法?仅解析函数返回正确的结果,读取的日期具有以下格式:dd.mm.yyyy

//Dateformatting
function parseDate (dateStr) {

    var s1 = dateStr.split(" ");
    var s1dat = s1[0].split(".");
    return new Date(s1dat[2], s1dat[1], s1dat[0])
};



var dateArr = [];

//Occupation
d3.tsv("data.csv", function(error, data, tsv) {
    datasetIn = data;
    datasetIn.forEach(function(d) {
                                d.datum = parseDate(d.datum);
                                d.Patients =  +d.Patients.replace(",", ".");
                                d.Beds=  +d.Antal_vardplats.replace(",", ".");
                                });




    for (index = 0; index < datasetIn.length; ++index) {
        dateArr.push(datasetIn[index].datum);
    }


    var maxYear = d3.max(dateArr).getFullYear();
    var maxDate = d3.max(dateArr);
})

1 个答案:

答案 0 :(得分:0)

在JavaScript中月份值从零开始,从1月份的0开始到12月份的11月份。将表示九月的人类可读9传递给new Date()应该为十月创建一个Date对象。

new Date("2015", "9", "7").toDateString();  // "Wed Oct 07 2015"

在解析人类可读的日期值时,对此进行调整应能为您提供正确的结果。

相关问题