Подтвердить что ты не робот

JavaScript Дата месяца Объект месяца начинается с 0

Моя цель - эффективно преобразовать временную метку из MySQL в объект JavaScript Date. Вот мой текущий фрагмент, который преобразует временную метку MySQL в форматированную дату в PHP:

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

Затем я использую это значение $date для диаграммы с использованием API диаграмм Google, для которого требуется объект JavaScript Date:

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

Проблема заключается в том, что объект JavaScript Date начинает индексировать месяц с 0, поэтому вывод всегда 1 месяц заранее. Каков наиболее эффективный способ решения этой проблемы?

Спасибо заранее!

4b9b3361

Ответ 1

Вы можете комбинировать конструктор даты с датой в формате 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)

Ответ 2

Вы должны вручную вычесть лишний 1 из числа месяцев, которое я боюсь. Объект JS Date - беспорядок.

Ответ 3

Чтобы получить дату в представление строки даты, совместимое с DataTable Google Chart, например

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