Я работаю с 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],
],
Я думаю, вот проблема: 'date (" m, d, Y, H, i, s ")'. Для 'Date.UTC()' это правильный порядок параметров: 'Date.UTC (fullYear, месяц, день, час, минуты, секунды, мс)'. Конечно, месяц находится в диапазоне 0 (янв.) -11 (Дек). –
@ PawełFus Я считаю, что лучшим решением является преобразование данных datetime в ** Unix Timestamp ** в запросе dql, я еще не нахожу, как действовать с доктриной dql –
@ PawełFus Конечно, я следую вашему предложению, следую правильные свойства для date.UTC. Как вы сказали в своем комментарии, месяц находится в диапазоне 0 (янв.) -11 (Дек). Поэтому см. Мое редактирование, теперь у меня есть правильная дата, кроме месяца, потому что в UTC месяц находится в диапазоне 0 (Янв.) -11 (Дек) –