JavaScript Date Object的月份索引从0开始

时间:2009-07-30 18:39:12

标签: javascript php mysql timestamp google-visualization

我的目标是以有效的方式将时间戳从MySQL转换为JavaScript Date对象。这是我当前的片段,它将MySQL时间戳转换为PHP中的格式化日期:

<?php
// formats timestamp into following format: 2009, 7, 30
$date =  date("Y, n, j", strtotime($row["date"]));
?>

然后我使用Google的图表API将此$date值用于图表,该API需要JavaScript Date对象:

data.setValue(<?=$count;?>, 0, new Date(<?=$date;?>));

问题是JavaScript Date对象以0开始月份索引,因此输出总是提前1个月 。处理这个问题最有效的方法是什么?

提前致谢!

3 个答案:

答案 0 :(得分:18)

您可以为日期构造函数提供mm / dd / yyyy或yyyy / mm / dd格式的日期,并将其转换为:

>>> new Date('7/30/2009');
Thu Jul 30 2009 00:00:00 GMT-0700 (Pacific Daylight Time)
>>> new Date('2009/7/30');
Thu Jul 30 2009 00:00:00 GMT-0700 (Pacific Daylight Time)

答案 1 :(得分:13)

您必须手动从月份编号中减去额外的1我害怕。 JS Date对象很乱。

答案 2 :(得分:1)

获取Date String Representation compatible with the Google Charts DataTable中的日期

onClickListener

没有遍历php中的查询行,你可以直接使用MySQL格式化它:

"Date(2015,0,31)" // note the quotes from the json string and the 0 for January

然后在javascript中:

<?php
$sql = "
    SELECT 
        CONCAT('Date(', YEAR(datefield), ',', (MONTH(datefield)-1), ',', DAY(datefield), ')') AS gChartDate, 
        valuefield
    FROM 
        table 
    ORDER BY
        datefield
";
$query = $pdo->query($sql);
$fetchAll = $query->fetchAll(PDO::FETCH_NUM); // fetch in not-associative array
array_unshift($fetchAll, [['type'=>'date', 'label'=>'date'], 'value']); // add title row
$json = json_encode($fetchAll, JSON_NUMERIC_CHECK);