2015-05-26 2 views
1

Я работаю с Symfony, doctrine, twig и highchart.js.верните правильный месяц даты и времени при использовании преобразования Date.UTC

Мне нужно создать диаграмму с библиотекой js и объектом данных ORM ORM.

Смотрите мой контроллер здесь:

public function chartTestAction() { 

    $em=$this->getDoctrine()->getManager(); 
    $datasGraphique = $em->getRepository('mySpaceMyBundle:Graphique2')->findAll(); 

    return $this->render('MySpaceMyBundle:myFolder:chartTest.html.twig', 
         array('datasGraphique' => $datasGraphique) 
         ); 
} 

Итак, мое лицо выглядит в таблице схеме:

---------------- 
|Graphique entity| 
|----------------| 
|id    | 
|consomation1 | 
|consomation2 | 
|consomation3 | 
|dateIndex  | 
|----------------| 

Для объяснения, есть 3 linecharts в моем графике, в моем lineschart мне нужно чтобы установить датуIndex для каждой суммы, как это example.

Фактически у меня есть xAxis datetime, час в час в течение дня, это регулярный интервал. Но мне нужно сделать на yAxis параметр для xAxis для даты и времени, чтобы правильно отобразить линейную диаграмму в правильной датеIndex. Это означает, что xAxis фиксирован, час в час, но если у меня есть dateIndex на 2015-05-05 00:03:08, yAxis нужно указывать на эту дату, которая не отображается на xAxis фиксированный час в час.

Это мое мнение веточки с яваскриптом частью, содержащей код серии для highchart.js:

series: [ 
    //consomation1 
     { 
      yAxis: 1, 
      type: 'spline', 
      name: '{{consomation1Name}}', 
      data: [{% for data in datasGraphique %} 
        [Date.UTC({{data.dateIndex|date("Y,m,d,H,i,s"")}}), {{data.consomation1}}], 
        {% endfor %}], 
      tooltip: { 
       valueSuffix: ' kW' 
      }, 

     }, 
     //consomation2 
     { 
      yAxis: 2, 
      name: '{{consomation2Name}}' , 
      data: [{% for data in datasGraphique %} 
        [Date.UTC({{data.dateIndex|date('Y,m,d,H,i,s"', "Europe/Paris")}}), {{data.consomation2}}], 
        {% endfor %}], 
      tooltip: { 
       valueSuffix: ' kW' 
      }, 

     }, 
     //consomation3 
     { 
      name: '{{consomation3Name}}' , 
      data: [{% for data in datasGraphique %} 
        [Date.UTC({{data.dateIndex|date("Y,m,d,H,i,s"")}}), {{data.consomation3}}], 
        {% endfor %}], 
      type: 'spline', 
      tooltip: { 
       valueSuffix: ' °C' 
      }, 
      dashStyle: 'shortdot', 

     } 
    ] 

Проблема возникла с переходом Date.UTC. Действительно, сценарий js возвращает мне ошибку, он хорошо работает, за исключением datetime. Например, в моей базе данных у меня есть это поле 2015-05-05 00:03:08, соответствующее 2015 за год, май за месяц, 5 за день 00:03:08 за час: мин: сек. Но в моем highchart после преобразования date.UTC оно возвращает мне это значение для этой даты 2015, Jun, 5, 00:03:08, которое не соответствует моим реальным данным, всего за месяц, потому что в UTC январь = 0 и декабрь = 11 вместо даты и времени, где январь = 1 и декабрь = 12.

Кому-то известно решение?

Я думаю, что сначала мне нужно преобразовать дату и время в unix timestamp в мой запрос dql, но я знаю, что доктрина не поддерживает преобразование функции UNIX_TIMESTAMP.

Как я могу перейти к правильному месяцу, могу ли я заставить это в javascrip?

этот код в моем JavaScript для XAxis:

//xAxis setup to manage the chart 
    xAxis: [{ 
     type: 'datetime', 
     dateTimeLabelFormats: { 
      day: '%H:%M', 
     }, 

     tickInterval: 3600 * 1000, 
     title: { 
      text: '<b>Heures journalière</b> ' 
     }, 
     crosshair: true, 
     tickWidth: 1, 
     gridLineWidth: 2 
    }], 

EDIT - пытается с датой.разобрать()

Я попытался это решение:

{ 
    yAxis: 2, 
    name: '{{consomation1Name}}' , 
    data: [{% for data in datasGraphique %} 
      [Date.parse({{data.dateIndex|date("Y-m-d H:i:s")}}), {{data.consoECS}}], 
      {% endfor %}], 
    tooltip: { 
     valueSuffix: ' kW' 
    }, 
}, 

Это возвращает меня это с ошибкой Uncaught SyntaxError: missing) after argument list:

data: [ 
    [Date.parse(2015-05-05 00:03:08), 0], // the error occured on the first data render here 
    [Date.parse(2015-05-05 01:19:34), -2], 
    [Date.parse(2015-05-05 02:44:16), 0], 
    [Date.parse(2015-05-05 03:18:19), 0], 
    [Date.parse(2015-05-05 04:24:06), 0], 
    [Date.parse(2015-05-05 05:12:44), 0], 
    [Date.parse(2015-05-05 06:55:08), 0], 
    [Date.parse(2015-05-05 07:26:08), 0], 
    [Date.parse(2015-05-05 08:32:05), 1], 
    [Date.parse(2015-05-05 09:34:50), 2], 
    [Date.parse(2015-05-05 10:42:16), 3], 
    [Date.parse(2015-05-05 11:16:03), 3], 
    [Date.parse(2015-05-05 12:27:07), 1], 
    [Date.parse(2015-05-05 13:22:08), 1], 
    [Date.parse(2015-05-05 14:18:51), 3], 
    [Date.parse(2015-05-05 15:06:27), -1], 
    [Date.parse(2015-05-05 16:40:00), 2], 
    [Date.parse(2015-05-05 17:30:24), 1], 
    [Date.parse(2015-05-05 18:36:24), 0], 
    [Date.parse(2015-05-05 19:43:57), 0], 
    [Date.parse(2015-05-05 20:32:41), 0], 
    [Date.parse(2015-05-05 21:28:29), 0], 
    [Date.parse(2015-05-05 22:37:14), 0], 
    [Date.parse(2015-05-05 23:53:14), 0], 
], 
+1

Я думаю, вот проблема: 'date (" m, d, Y, H, i, s ")'. Для 'Date.UTC()' это правильный порядок параметров: 'Date.UTC (fullYear, месяц, день, час, минуты, секунды, мс)'. Конечно, месяц находится в диапазоне 0 (янв.) -11 (Дек). –

+0

@ PawełFus Я считаю, что лучшим решением является преобразование данных datetime в ** Unix Timestamp ** в запросе dql, я еще не нахожу, как действовать с доктриной dql –

+0

@ PawełFus Конечно, я следую вашему предложению, следую правильные свойства для date.UTC. Как вы сказали в своем комментарии, месяц находится в диапазоне 0 (янв.) -11 (Дек). Поэтому см. Мое редактирование, теперь у меня есть правильная дата, кроме месяца, потому что в UTC месяц находится в диапазоне 0 (Янв.) -11 (Дек) –

ответ

1

буксировочные вещи, чтобы сделать его работу:

  • установить useUTC ложному формат изменения
  • дат и использовать Date.parse(): Date.parse('{{data.dateIndex|date("Y-m-d H:i:s")}}')

И работает демо: http://jsfiddle.net/4099kjzy/

0

Чтобы использовать метку времени и избежать даты проблемы формата вы можете заменить

[Date.UTC({{data.dateIndex|date("Y,m,d,H,i,s"")}}) 

от

[Date.UTC({{data.dateIndex.date("U") }}) 
+0

Спасибо за ваш ответ, я уже попробовал ваше предложение. Я использую '[Date.UTC ({{data.dateIndex.date (" U ")}})', twig возвращает мне ошибку, например ** Метод «date» для объекта «DateTime» не существует **, и если я использую '[Date.UTC ({{data.dateIndex.timestamp}}), мои линейные диаграммы вообще не отображаются. –