Сложность преобразования строки json в формат даты в d3 - PullRequest
0 голосов
/ 28 сентября 2018

Я пытался взглянуть на некоторые примеры кода для этого, но я застрял здесь.У меня есть JSON, который читает даты в виде строк.Например:

1/1/1993 - 33970.

У меня есть точки на карте, каждая из которых связана с датами.У меня есть таймер на основе дат.После обновления ползунка времени я бы хотел, чтобы внешний вид точек менялся в зависимости от значения даты ползунка.

// build slider

var inputValue = null;
var year = ["1993","1994","1995","1996","1997","1998","1999","2000","2001","2002","2003","2004","2005","2006","2007","2008","2009", "2010","2011","2012","2013","2014","2015","2016","2017","2018","2019"];

Создание функции для обновления ползунка.

function update(value) {
document.getElementById("range").innerHTML=year[value];
inputValue = year[value];
d3.selectAll(".points")
    .attr("fill", dateMatch);
}

d3.select("#timeslide").on("input", function() {
    update(+this.value);
    console.log(value)

});

И наконец, построение функции, которая сопоставляет дату в моих данных с датой в ползунке времени!

function dateMatch(data, value) {
var d = new Date(data.properties.Sign_Date);
var y = [d.getFullYear()];
console.log(y)
console.log(d)
if (inputValue == y) {
    this.parentElement.appendChild(this);
    return "blue";
} else {
    return "#999";
};

}

Я думаю, что шаблон здесь должен работать, но есть проблема чтения дат в функции dateMatch.По какой-то причине он просто печатает

Wed Dec 31 1969 16:00:41 GMT-0800 (Pacific Standard Time)

Для каждой записи в моих данных.Что не имеет смысла, так как мои данные даже не восходят к 1969 году. Может кто-нибудь сказать мне, что, по их мнению, может сломаться здесь или, что лучше, более простой способ фильтрации этих временных данных?

1 Ответ

0 голосов
/ 29 сентября 2018

Вам нужно конвертировать все ваши даты в реальные даты.Помните, что если вы не используете UTC (универсальный часовой пояс) или другой определенный часовой пояс, преобразование даты будет зависеть от часового пояса, установленного на компьютере.Для получения дополнительной информации о датах JavaScript, я предлагаю прочитать MDN .

function createDateUTC(yourDateFormat) {
    var parsed = yourDateFormat.split('/'),
        day = +parsed[0],
        monthIndex = +parsed[1]-1,
        year = +parsed[2]
    return new Date(Date.UTC(year, monthIndex, day))
}
...