Google Charts: проходящие даты без использования Date ()? - PullRequest
9 голосов
/ 12 марта 2012

Резюме

Я пытаюсь создать линейный график в Google Charts с датами в качестве оси X. У меня все это отсортировано, но для него требуются проходные даты в виде Date объектов, т.е. new Date(2005, 3, 13). Можно ли как-нибудь передать его как метку времени Unix или, возможно, строку?

Подробнее

Итак, у меня есть куча данных в PHP, которые я хочу отобразить. Я беру данные и упорядочиваю их в массив в формате, который будет производить правильный формат JSON при запуске через json_encode() для документов данных Google :

$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 ),
            ),
        ),
    ),
);

{"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 объект, а не как число (или строка). Это выдает ошибку прямо сейчас, но если я изменю ее с datetime на number, она отлично отобразится, поэтому я знаю, что мой формат JSON правильный.

Могу ли я что-нибудь сделать, чтобы API принимал метки времени Unix, или, может быть, какую-то строку?

Когда я это напечатал, я понял, что, возможно, я мог бы использовать некоторый Javascript для обхода объекта JSON и замены временных меток на Date объекты, но было бы неплохо, если бы мне не нужно было манипулировать данными через Javascript.

EDIT

Я получил часть пути, установив type на number и пройдя такие даты:

        array(
            'c' => array(
                array( 'v' => 1331479502, 'f' => 'March 11th, 2012' ),
                array( 'v' => 56872 ),
            ),
        ),

Это заставляет значение f отображаться во всплывающей подсказке (yay!), Но значение v все еще используется для меток оси. Хм.

РЕДАКТИРОВАТЬ # 2

Похоже, что есть возможность использовать DataView для преобразования number метки времени в дату, но я еще не понял.

Ответы [ 2 ]

9 голосов
/ 13 марта 2012

В итоге я прошелся по массиву 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 );
}
0 голосов
/ 12 марта 2012

Я использовал строку вместо типа даты при отображении даты на оси X.Это позволило мне настроить отображение DateTime на стороне сервера, отформатировав его в виде строки, а также нет необходимости в хитростях, таких как создание объекта даты из некоторой строки или числовых значений в JavaScript.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...