Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Как передать данные в Google Charts (из php в javascript) (конкретно дату не получается). / 10 сообщений из 10, страница 1 из 1
31.05.2015, 21:18
    #38972829
kefirko
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать данные в Google Charts (из php в javascript) (конкретно дату не получается).
За основу взято это: Creating Material Line Charts
Есть выборка из БД (дата, цена1, цена2, цена3):
Код: php
1.
2.
3.
4.
5.
6.
7.
$data = array(
    array('2015-05-02 22:51:54', 37.8, 80.8, 41.8),
    array('2015-05-03 12:33:16', 30.9, 69.5, 32.4),
    array('2015-05-05 00:27:10', 28.3, 79.5, 33.4),
    array('2015-05-12 16:11:33', 25.7, 69.5, 34.4),
    array('2015-06-03 22:22:44', 32.1, 79.5, 22.4),
)


Для первоначальной проверки делаю всё ручками и это замечательно работает:
Код: html
1.
2.
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<div id="chart_div" style="width: 1000px; height: 400px; background-color: aqua"></div>


Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
google.load('visualization', '1.1', {packages: ['line']});
google.setOnLoadCallback(drawChart);

function drawChart() {
    var data = new google.visualization.DataTable();

    data.addColumn('datetime', 'Дата');
    data.addColumn('number', '#1');
    data.addColumn('number', '#2');
    data.addColumn('number', '#3');

    var arr = [
        [new Date(2015, 4, 2, 22, 51, 54), 37.8, 80.8, 41.8],
        [new Date(2015, 4, 3, 12, 33, 16), 30.9, 69.5, 32.4],
        [new Date(2015, 4, 5, 0, 27, 10), 28.3, 79.5, 33.4],
        [new Date(2015, 4, 12, 16, 11, 33), 25.7, 69.5, 34.4],
        [new Date(2015, 5, 3, 22, 22, 44), 32.1, 79.5, 22.4],
    ]
    data.addRows(arr);

    var options = {
        title: 'Супер график',
        subtitle: 'цена указана в руб.',
        hAxis: {
            title: 'Дата'
        },
        vAxis: {
            title: 'Цена'
        }
    };

    var chart = new google.charts.Line(document.getElementById('chart_div'));

    chart.draw(data, google.charts.Line.convertOptions(options));
}


График вырисовывается.
А вот теперь надо передать данные из php в javascript. И все бы ничего, конструкция типа <?=json_encode($data)?> спасает. Но вроде бы как даты передаются так: new Date() . И надо малость пересобрать массив.
Разбираю строку с датой 2015-05-02 22:51:54 и пересобираю её в new Date(2015, 4, 2, 22, 51, 54) . 4 вместо 05 потому что месяцы считаются от 0, а не от 1.
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
google.load('visualization', '1.1', {packages: ['line']});
google.setOnLoadCallback(drawChart);

function drawChart() {
    var data = new google.visualization.DataTable();

    data.addColumn('datetime', 'Дата');
    data.addColumn('number', '#1');
    data.addColumn('number', '#2');
    data.addColumn('number', '#3');

    var arr = <?=json_encode($data)?>;

    var re = /(\d{4})-(\d{2})-(\d{2})\s(\d{2}):(\d{2}):(\d{2})/g;
    var i = 0;
    for (i; i < arr.length; i++) {
        arr[i][0] = arr[i][0].replace(re, function ($0, $1, $2, $3, $4, $5, $6) {
            return (new Date($1, $2 - 1, $3, $4, $5, $6));
        });
    };
    data.addRows(arr);

    var options = {
        title: 'Супер график',
        subtitle: 'цена указана в руб.',
        hAxis: {
            title: 'Дата'
        },
        vAxis: {
            title: 'Цена'
        }
    };

    var chart = new google.charts.Line(document.getElementById('chart_div'));

    chart.draw(data, google.charts.Line.convertOptions(options));
}


И вроде бы все норм. Вывожу через console.log пересобранный массив и в нем, на месте где было 2015-05-02 22:51:54 теперь красуется Sat May 02 2015 22:51:54 GMT+0600 (Уральское время (зима)) - значит проканало. Но дальше ошибка (см. прикрепленное изображение). И график не рисуется. Целый день бился. Пришлось даже английский свой вспомнить.
Если данные просто числа, без дат, то все норм, а с датами - беда.
И еще есть одно но, которое я тоже не понимаю. Если взять первый пример и поменять порядок строк у входных данных, то и график поменяется, а этого по идее быть не должно. Какая тебе разница в каком порядке я ставлю точки на графике, они все равно займут только те места, которые надо, но с Goole Charts это не так. Или я чего-то недопонял.
Есть специалисты?
Если у кого-то есть опыт построения графиков с помощью другой библиотеки, я рад выслушать. Только примерчик бы. А то я не программист, у меня недели уходят с чем-н разобраться.
...
Рейтинг: 0 / 0
31.05.2015, 21:25
    #38972834
kefirko
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать данные в Google Charts (из php в javascript) (конкретно дату не получается).
Вот кстати у кого-то тоже такая проблема есть , но я пока в его ответ не въехал. Сижу разбираюсь.
...
Рейтинг: 0 / 0
01.06.2015, 09:52
    #38972958
SharuPoNemnogu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать данные в Google Charts (из php в javascript) (конкретно дату не получается).
в php лучше сразу преобразовать, чем парсить строку даты в самом js
...
Рейтинг: 0 / 0
01.06.2015, 10:12
    #38972976
kefirko
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать данные в Google Charts (из php в javascript) (конкретно дату не получается).
Пробовал отправлять из php. На запись "new Date(...)" ругается, а как отправить правильный объект, я не нашел.
...
Рейтинг: 0 / 0
01.06.2015, 10:34
    #38973007
carrotik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать данные в Google Charts (из php в javascript) (конкретно дату не получается).
kefirko,

...а если использовать не datetime в графике, а number, который будет результатом Date.parse() .. ???
...
Рейтинг: 0 / 0
01.06.2015, 20:31
    #38973777
kefirko
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать данные в Google Charts (из php в javascript) (конкретно дату не получается).
kefirkoЕсли данные просто числа, без дат, то все норм, а с датами - беда.
...
Рейтинг: 0 / 0
02.06.2015, 09:16
    #38973969
carrotik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать данные в Google Charts (из php в javascript) (конкретно дату не получается).
kefirkokefirkoЕсли данные просто числа, без дат, то все норм, а с датами - беда.

.. так и передавайте из РНР число (например, через idate() - я не спец в ПХП - какие там еще функции есть для преобразования даты в целое)
...
Рейтинг: 0 / 0
02.06.2015, 09:20
    #38973972
SharuPoNemnogu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать данные в Google Charts (из php в javascript) (конкретно дату не получается).
да через тот же date вытащить по отдельности, в чем проблема то. в php дату распарсить намного приятнее и удобнее имхо
...
Рейтинг: 0 / 0
03.06.2015, 00:42
    #38974784
скукотища
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать данные в Google Charts (из php в javascript) (конкретно дату не получается).
kefirko,
> И вроде бы все норм. Вывожу через console.log пересобранный массив и в нем, на месте где было 2015-05-02 22:51:54 теперь
> красуется Sat May 02 2015 22:51:54 GMT+0600 (Уральское время (зима)) - значит проканало.

Не проканало. Ты меняешь строку на строку
Код: javascript
1.
2.
3.
4.
5.
6.
7.
    var i = 0;
    for (i; i < arr.length; i++) {
// метод replace возвращает _строку_. В итоге в arr[i][0] как была строка, так и осталась
        arr[i][0] = arr[i][0].replace(re, function ($0, $1, $2, $3, $4, $5, $6) {
            return (new Date($1, $2 - 1, $3, $4, $5, $6));
        });
    }


вместо того, чтобы поменять строку на дату
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
    var i = 0, 
        cd = function(s){return new Date(
                    s.substring(0,4), 
                    s.substring(5,7) - 1, 
                    s.substring(8,10), 
                    s.substring(11,13), 
                    s.substring(14,16), 
                    s.substring(17,19))};
    for (; i < arr.length; i++) {
        arr[i][0] = cd(arr[i][0]);    
    }

...
Рейтинг: 0 / 0
04.06.2015, 12:22
    #38976083
kefirko
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать данные в Google Charts (из php в javascript) (конкретно дату не получается).
Спасибо.
...
Рейтинг: 0 / 0
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Как передать данные в Google Charts (из php в javascript) (конкретно дату не получается). / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]