Индекс месяца JavaScript Date Object начинается с 0
-
05-07-2019 - |
Вопрос
Моя цель - эффективно преобразовать метку времени из MySQL в объект JavaScript Date. Вот мой текущий фрагмент, который преобразует метку времени MySQL в форматированную дату в PHP:
<?php
// formats timestamp into following format: 2009, 7, 30
$date = date("Y, n, j", strtotime($row["date"]));
?>
Затем я использую это значение $ date
для диаграммы, используя Google API для создания диаграмм, для которой требуется объект JavaScript Date:
data.setValue(<?=$count;?>, 0, new Date(<?=$date;?>));
Проблема заключается в том, что объект JavaScript Date начинает индекс месяца с 0, поэтому результат всегда за 1 месяц заранее . Как наиболее эффективно решить эту проблему?
Заранее спасибо!
Решение
Вы можете передать конструктору Date дату в формате мм / дд / гггг или гггг / мм / дд, и она преобразует ее:
>>> 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
из номера месяца. Объект JS Date - беспорядок.
Чтобы получить дату в представлении строки даты, совместимом с таблицей данных Google Charts нравится
"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) ?>);