2013-06-22 2 views
4

Например, у меня есть start и endПостроить массив дат между датами начала и окончания. (d3.js)

start = new Date(2013, 2, 28) 
end = new Date(2013, 3, 2) 

Как я мог получить из этого массива, как этот

[new Date(2013, 2, 28), 
new Date(2013, 2, 29), 
new Date(2013, 2, 30), 
new Date(2013, 2, 31), 
new Date(2013, 3, 1), 
new Date(2013, 3, 2)] 

В настоящее время я читал документы о Time-Scales, но все еще имеющего проблемы с пониманием того, как использовать их для достижения этого эффекта. (Или, может быть, есть лучший способ сделать это, если да, то я был бы рад знать)

ответ

3

Чтобы сделать это с d3:

var dateArray = d3.time.scale() 
       .domain([new Date(2013, 2, 28), new Date(2013, 3, 2)]) 
       .ticks(d3.time.days, 1) 

Интернет демо: http://jsfiddle.net/aczuV/1/

4

Просто обнаружил, что я могу использовать range с Time Intervals

d3.time.day.range(new Date(2013, 2, 28), 
        new Date(2013, 3, 2 + 1)) 
+2

Я забыл об этом! Еще короче: d3.time.days (новая дата (2013, 2, 28), новая дата (2013, 3, 2)) –

1

Чтобы обновить этот ответ на d3 V4 syntax, использование:

var dateRange = d3.timeDays(new Date(2013, 2, 28), new Date(2013, 3, 2)); 

Некоторые важные замечания:

  • Месяц является 0-индексированные, так 0 января. Этот пример начнется 28 марта, а не 28 февраля.
  • Дата окончания не включена в возвращаемое значение. Таким образом, последняя дата в этом примере является первой, а не второй.
+0

Спасибо за это; другие ответы будут приводить к ошибкам с v4. – scottyseus