Javascript 使用Date.UTC转换时返回日期时间的正确月份

Javascript 使用Date.UTC转换时返回日期时间的正确月份,javascript,symfony,date,datetime,twig,Javascript,Symfony,Date,Datetime,Twig,我正在与Symfony、doctrine、twig和highchart.js合作 我需要用js库和ORM数据对象创建一个图表 在此处查看我的控制器: public function chartTestAction() { $em=$this->getDoctrine()->getManager(); $datasGraphique = $em->getRepository('mySpaceMyBundle:Graphique2')->findAll();

我正在与Symfony、doctrine、twig和highchart.js合作

我需要用js库和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个折线图,在我的折线图中,我需要像这样为每个组合设置日期索引

事实上,我在xAxis上有datetime,每天每小时一小时,这是一个固定的间隔。但是我需要在yAxis上为datetime的xAxis设置参数,以便在正确的dateIndex上正确显示折线图。也就是说,xAxis是固定的,小时/小时,但是如果我在
2015-05-05 00:03:08
上有一个日期索引,那么yAxis需要指向这个日期,而不是xAxis固定小时/小时

这是my twig视图,其中包含highchart.js系列代码的javascript部分:

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月的月份匹配,5日的00:03:08的小时:分钟:秒匹配。但在我的highchart中,在date.UTC转换后,它会返回我这个日期的值
2015年6月5日00:03:08
,这与我的实际数据不匹配,只是当月的数据,因为在UTC中,一月=0,十二月=11,而不是一月=1,十二月=12的日期时间

有人知道解决办法吗

我认为首先我需要在dql查询中转换unix时间戳中的datetime,但我知道doctrine不支持unix_时间戳函数转换

我怎样才能获得正确的月份,我可以在javascrip中强制这样做吗

这是我的xAxis javascript中的代码:

//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
    }],
它在参数列表后返回此参数,并显示错误
Uncaught SyntaxError:missing):

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],
],

要使用unix时间戳并避免日期格式问题,可以替换

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


有两件事可以让它发挥作用:

  • useutct
    设置为false
  • 更改日期格式并使用
    Date.parse()
    Date.parse({{data.dateIndex | Date(“Y-m-dh:i:s”)}}')

工作演示:

我想问题出在这里:
日期(“m,d,Y,H,I,s”)
。对于
Date.UTC()
这是正确的参数顺序:
Date.UTC(全年、月、日、时、分、秒、毫秒)
。当然,月份在0(一月)-11(十二月)范围内。@PawełFus我认为最好的解决方案是在dql查询中将日期时间数据转换为Unix时间戳,我还不知道如何继续dql@Pawe当然,我会遵循您的建议,遵循date.UTC的正确属性。正如你在评论中所说,这个月确实在0(一月)-11(十二月)范围内。请看我的编辑,现在我有了正确的日期,除了月份,因为在UTC中,月份在0(1月)-11(12月)范围内。不使用
date.UTC()
,而是使用
date.parse()
?像这样:
Date.parse({data.dateIndex|Date(“Y-m-dh:i:s”“)}})
?@PawełFus我不使用Date.parse,因为在highcharts.js中datetime必须在Date.UTC中转换。我仍然尝试了你的建议,但折线图没有显示出来。谢谢你的回答,我已经尝试了你的两个建议。如果我使用
[Date.UTC]({{data.dateIndex.date(“U”)}}
,twig为对象“DateTime”返回一个类似方法“date”的错误,如果我使用
[date.UTC({data.dateIndex.timestamp}}})
,我的折线图根本不显示。
[Date.UTC({{data.dateIndex|date("Y,m,d,H,i,s"")}})
[Date.UTC({{data.dateIndex.date("U") }})