У меня есть вид странной проблемы. Я загружаю данные для обзорной страницы. Мне нужно показать максимальную дату, чтобы пользователи знали, с каким периодом времени они имеют дело. Теперь я знаю, какая дата должна быть (дата сегодня или вчера, это обновляется раз в ночное время), но я хотел бы сделать максимальную функцию в любом случае, если что-то пойдет не так во время обновления.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);
})
Знаете ли вы, что значения месяца в JavaScript основаны на нуле? Передача в человекочитаемом 9, представляющем сентябрь, на 'new Date()', как предполагается, должна создать объект Date для октября. – altocumulus
@altocumulus: Да, я использовал его в других функциях, но забыл об этом здесь. Вот почему ... thx! – ErrantBard
В стороне, я спрашивал себя, почему вы повторяете 'datasetIn' дважды. Одна итерация находится внутри '.forEach()', а затем вы делаете это с помощью цикла for. Разве вы не можете добавить 'dateArr.push (datasetIn [index] .datum),' to' .forEach() 'для повышения удобочитаемости и производительности? – altocumulus