JavaScript的Date对象的月份指数从0开始(JavaScript Date Object&

2019-06-27 06:38发布

我的目标是从MySQL时间戳转换成JavaScript Date对象以有效的方式。 这是我的一种转换MySQL的时间戳到PHP格式化的日期当前片段:

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

我然后用这个$date值,使用谷歌的API图表图表它需要JavaScript Date对象:

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

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

提前致谢!

Answer 1:

您可以在毫米养活日期构造函数的日期/ 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)


Answer 2:

您必须手动减去额外的1来自月份数我害怕。 JS Date对象是一个烂摊子。



Answer 3:

为了获得在一个日期日期字符串表示与谷歌图表数据表兼容像

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


文章来源: JavaScript Date Object's month index begins with 0