23

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

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

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

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

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

提前致谢!

4

3 回答 3

19

您可以为 Date 构造函数提供 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)
于 2009-07-30T18:41:59.403 回答
14

1恐怕你必须手动从月份数中减去额外的部分。JS Date 对象是一团糟。

于 2009-07-30T18:41:15.787 回答
1

在与 Google Charts DataTable 兼容的日期字符串表示中获取日期,例如

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

无需遍历 php 中的查询行,您可以像这样直接将 MySQL 格式化:

<?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);

然后在javascript中:

var data = google.visualization.arrayToDataTable(<?php echo($json) ?>);
于 2015-10-25T14:29:12.913 回答