JavaScript Date Object’s month index begins with 0

My goal is to convert a timestamp from MySQL into a JavaScript Date object in an efficient manner. Here is my current snippet that converts the MySQL timestamp into a formatted date in PHP:

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

I am then using this $date value for a chart using Google’s charting API which requires JavaScript Date object:

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

The problem is that the JavaScript Date object begins the month index with 0 so the output is always 1 month in advance. What is the most efficient way in dealing with this issue?

Thanks in advance!

You can feed the Date constructor a date in mm/dd/yyyy or yyyy/mm/dd format and it will convert it:

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

You have to manually subtract that extra 1 from month number I’m afraid. JS Date object is a mess.

To obtain a date in the Date String Representation compatible with the Google Charts DataTable like

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

without walking through the query rows in php, you could have MySQL format it directly like this:

$sql = "
        CONCAT('Date(', YEAR(datefield), ',', (MONTH(datefield)-1), ',', DAY(datefield), ')') AS gChartDate, 
$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);

then in javascript:

var data = google.visualization.arrayToDataTable(<?php echo($json) ?>);

The answers/resolutions are collected from stackoverflow, are licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0 .
Read More:   How to play a mp3 using Javascript? [duplicate]

Similar Posts