2014-02-05 2 views
0

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

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" 
}] 

Поэтому в основном я хотел бы взять на себя «From» значение и получить только время, возвращенное в виде десятичного значения. Я не думаю, что преобразование времени в десятичное число с Time Formatting, это просто расщепление значения, которое мне кажется очень трудным. Любой из вас, ребята, знает, как это можно достичь?

Спасибо,

Cas

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

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

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

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

Просто на самом деле не видите, что ...

ответ

3

С 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 дает Вам строки, поэтому вам нужно преобразовать их в Numbers, если вы делаете количественные данные с ними:

var hours = parseInt(matches[1]); 

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

var hours = +matches[1]; 
+0

Спасибо большое! Я имею в виду использовать D3, и глядя на него прямо сейчас, ваш ответ кажется именно тем, что я ищу. Вернусь к вам, если это произойдет. – Yonker

+0

Прохладный. Обратите внимание, что вам не нужно создавать новый 'd3.time.format()' для каждой строки, которую вы разбираете (при условии, что они имеют одинаковый формат). Вы можете построить его один раз и повторно использовать для каждой строки. – meetamit

+0

Если у вас есть время, возможно, вы можете взглянуть на JSFiddle, который я только что добавил ... потому что я больше не буду здесь, ghehe. – Yonker