2015-09-07 2 views
0

У меня есть вид странной проблемы. Я загружаю данные для обзорной страницы. Мне нужно показать максимальную дату, чтобы пользователи знали, с каким периодом времени они имеют дело. Теперь я знаю, какая дата должна быть (дата сегодня или вчера, это обновляется раз в ночное время), но я хотел бы сделать максимальную функцию в любом случае, если что-то пойдет не так во время обновления.d3.max return неправильная дата

Проблема, с которой я столкнулась, заключается в том, что как d3.max, так и пользовательская функция max-date возвращает неверную дату. Один месяц в будущем, поэтому сегодня должен показать 7/9 2015, но вместо этого он отображает 7/10 2015. Когда я фильтрую данные на 7/10, я получаю пустой массив. В скрипке это работает хорошо, так что происходит что-то подозрительное. Я запускаю d3.tsv (tsv прав, даже если расширение говорит .csv, файл фактически разделен на вкладку), может быть, что-то там вызывает проблемы? Любые идеи, в которых я могу пойти не так? одна parsefunction возвращает правильные результаты, даты, когда для чтения имеют следующий формат: дд.мм.гггг

//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

Знаете ли вы, что значения месяца в JavaScript основаны на нуле? Передача в человекочитаемом 9, представляющем сентябрь, на 'new Date()', как предполагается, должна создать объект Date для октября. – altocumulus

+0

@altocumulus: Да, я использовал его в других функциях, но забыл об этом здесь. Вот почему ... thx! – ErrantBard

+1

В стороне, я спрашивал себя, почему вы повторяете 'datasetIn' дважды. Одна итерация находится внутри '.forEach()', а затем вы делаете это с помощью цикла for. Разве вы не можете добавить 'dateArr.push (datasetIn [index] .datum),' to' .forEach() 'для повышения удобочитаемости и производительности? – altocumulus

ответ

0

В значениях JavaScript месяц, начиная с нуля, начиная с 0 за январь 11 за декабрь. Передача в человекочитаемом 9, представляющем сентябрь до new Date(), должна создать объект Date для октября.

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

Настройка на это должно дать вам правильный результат при анализе значений даты удобочитаемых.

Смежные вопросы