D3js получает только часть значения и преобразует его в десятичное

Я пытаюсь получить десятичное значение для значения, выраженного в дате. Моя проблема в том, что мне нужно только время в дате, а не сама дата. Итак, вот часть моих данных.json:

var data = [
  {
    "Id":"1390794254991",
    "Tz":"Europe/Amsterdam",
    "From":"27. 01. 2014 4:44",
    "To":"27. 01. 2014 12:09",
    "Sched":"08. 02. 2014 5:24",
    "Hours":"7.430"
}]

Так что в основном я хотел бы взять значение "От" и получить только время, возвращаемое в десятичном значении. Я не думаю, что преобразование времени в десятичное число с помощью Форматирования времени, это просто разделение значения, которое мне кажется довольно сложным. Кто-нибудь из вас, ребята, знает, как этого достичь?

Спасибо,

Cas

Редактировать: Хорошо, здесь мы идем. Я сделал JSFiddle, чтобы прояснить ситуацию. Поскольку в моем свидании есть ВРЕМЯ (ЧЧ: ММ), прямоугольники в моей диаграмме не появляются в определенный день в оси x. ВМЕСТО они выходят в день И время на оси.

Мне просто нужно, чтобы это была конкретная дата, а не дата и время.

Я думаю, что я должен изменить что-то в следующей части:

dataFiltered.forEach(function(d) {
         d.From = parseDate(d.From);
    });

Просто не понимаю, что...

1 ответ

Решение

С d3 вы создадите анализатор времени, дадите ему строку для анализа и получите объект Date.

var parser = d3.time.format('%d. %m. %Y %H:%M');
var date = parser.parse("05. 52. 2014 4:32");

Затем вы можете делать как хотите с этим объектом даты, в том числе

var hours = date.getHours() // 4
var minutes = date.getMinutes() // 32

Но вы имели в виду, что не хотите использовать d3 (несмотря на то, что ваш вопрос помечен d3)? Если это так, вы также можете использовать RegExp:

var dateString = "05. 52. 2014 4:32";
var matches = dateString.match(/(\d?\d):(\d\d)$/);
// yields ["4:32", "4", "32"]

Затем вы можете получить нужные токены либо через

var hours = matches[1];
var minutes = matches[2]

или же

var hours = RegExp.$1;
var minutes = RegExp.$2

Однако в любом случае RegExp возвращает вам строки, поэтому вам нужно преобразовать их в числа, если вы выполняете количественные действия с ними:

var hours = parseInt(matches[1]);

или более загадочно

var hours = +matches[1];
Другие вопросы по тегам