d3 - 使用d3动态创建多列数据

时间:2014-02-21 09:14:55

标签: javascript d3.js

我有两个约会。我想创建一个数组,其中包含它们之间的天数。

我成功完成了。这是代码。

代码:

var data = [];
var start = new Date('2014-02-01');
var end = new Date('2014-02-28');

var timeDiff = Math.abs(end.getTime() - start.getTime());
var diffDays = Math.ceil(timeDiff / (1000 * 3600 * 24));
for ( var i = 0; i < diffDays; ++i ) {
    var date = new Date(start)
    date.setDate(start.getDate() + i)

    var dd = date.getDate();
    var mm = date.getMonth() + 1;
    var yyyy = date.getFullYear();

    formattedDate = mm + '/' + dd + '/' + yyyy

    data.push(formattedDate)
}

我得到了阵列之间的天数。

但现在我看起来有点前进。

我想添加另一列。

假设我有以下日期。 ['2014-02-05', '2014-02-10']。我想添加另一个像date2这样的列,除了动态生成日期的行和上面两个日期匹配之外的所有行都有-值。

有人请帮我动态创建两列数据。

预期产出:

{ "date": "2014-02-01", "date2": "-" },
{ "date": "2014-02-02", "date2": "-" }
{ "date": "2014-02-03", "date2": "2014-02-03" }
{ "date": "2014-02-04", "date2": "-" }
{ "date": "2014-02-05", "date2": "2014-02-05" }
{ "date": "2014-02-06", "date2": "-" }

2 个答案:

答案 0 :(得分:2)

您可以执行类似

的操作
var data = [];
var start = new Date('2014-02-01');
var end = new Date('2014-02-28');
var dateFormat = d3.time.format('%Y-%m-%d');
var specialDates = ['2014-02-05', '2014-02-10'];

var newData = d3.time.day.range(start, end).map(
    function(d){
        var thisDateString = dateFormat(d);
        if (specialDates.indexOf(thisDateString) < 0)
            return {'date':thisDateString, 'date2':'-'}
        else
           return {'date':thisDateString, 'date2':thisDateString}
    }
)

看看这个JSFiddle

我们正在使用d3.time.day.range(start, end)为我们提供一系列日子。然后使用.map创建一个新数组。 这个闪亮的新数组的值是什么?当传入我们定义的函数时,为原始数组中的每个项重新调整(所以我们想要的任何东西)。

答案 1 :(得分:0)

您可以使用d3

轻松创建日期数组
d3.time.day.range(start, end)

您可以使用documentation中当前为

的任何时间间隔
  • 秒,分钟,小时,日,周,月,年
  • 星期日,星期一,星期二,星期三,星期四,星期五,星期六