Google Charts:不使用Date()传递日期?

Vip*_*ond 9 javascript json google-visualization

摘要

我正在尝试在Google Charts中创建一个以日期为X轴的折线图.我有所有排序但它需要将日期作为Date对象,即new Date(2005, 3, 13).有什么方法可以将它作为Unix时间戳或者字符串传递给它?

更多细节

所以我在PHP中有一堆我希望绘制的数据.根据Google数据文档json_encode(),我正在获取数据并将其排列为一种格式,该格式将在运行时生成正确的JSON格式:

$graph_data = array(
    'cols' => array(
        array(
            'id' => 'date',
            'label' => 'Date',
            'type' => 'datetime',
        ),
        array(
            'id' => 'odometer',
            'label' => 'Miles',
            'type' => 'number',
        ),
    ),
    'rows' => array(
        array(
            'c' => array(
                array( 'v' => 1331479502 ),
                array( 'v' => 56872 ),
            ),
        ),
        array(
            'c' => array(
                array( 'v' => 1331375984 ),
                array( 'v' => 55324 ),
            ),
        ),
        array(
            'c' => array(
                array( 'v' => 1328966460 ),
                array( 'v' => 54244 ),
            ),
        ),
    ),
);
Run Code Online (Sandbox Code Playgroud)

{"cols":[{"id":"date","label":"Date","type":"datetime"},{"id":"odometer","label":"Miles","type":"number"}],"rows":[{"c":[{"v":1331479502},{"v":56872}]},{"c":[{"v":1331375984},{"v":55324}]},{"c":[{"v":1328966460},{"v":54244}]}]}

所以我有JSON创建,但API希望日期作为Date对象而不是数字(或字符串)传递.它现在抛出一个错误,但是如果我将其更改datetimenumber,它会完美地绘制,所以我知道我的JSON格式是正确的.

有什么办法让API接受Unix时间戳,或者某种字符串?

当我输入了这一点,我意识到也许我可以用一些JavaScript走JSON对象,并使用替换时间戳Date的对象,但它会是不错的,如果我没有通过Javascript做任何数据操作.

编辑

我通过像这样设置typeto number和传递日期来获得部分路径:

        array(
            'c' => array(
                array( 'v' => 1331479502, 'f' => 'March 11th, 2012' ),
                array( 'v' => 56872 ),
            ),
        ),
Run Code Online (Sandbox Code Playgroud)

这使得f值显示在工具提示中(yay!),但该v值仍用于轴标签.嗯.

编辑#2

看起来使用DataViewnumber时间戳转换为日期可能会有一些潜力,但我还没想到它.

Vip*_*ond 9

我最终只是走JSON数组并用Date对象替换时间戳.它比我预期的要容易:

for ( var i = 0; i < json.rows.length; i++ ) { 
    json.rows[i].c[0].v = new Date( json.rows[i].c[0].v * 1000 );
}
Run Code Online (Sandbox Code Playgroud)