Convert JavaScript to date object to MySQL date format (YYYY-MM-DD)
Solution 1:
To get the date:
const date = new Date().toJSON().slice(0, 10)
console.log(date) //2015-07-23
For datetime:
const datetime = new Date().toJSON().slice(0, 19).replace('T', ' ')
console.log(datetime) //2015-07-23 11:26:00
Note that the resulting date/datetime will always be in the UTC timezone.
Solution 2:
Update: Here in 2021, Date.js hasn't been maintained in years and is not recommended, and Moment.js is in "maintenance only" mode. We have the built-in Intl.DateTimeFormat
, Intl.RelativeTimeFormat
, and (soon) Temporal
instead, probably best to use those. Some useful links are linked from Moment's page on entering maintenance mode.
Old Answer:
Probably best to use a library like Date.js (although that hasn't been maintained in years) or Moment.js.
But to do it manually, you can use Date#getFullYear()
, Date#getMonth()
(it starts with 0 = January, so you probably want + 1), and Date#getDate()
(day of month). Just pad out the month and day to two characters, e.g.:
(function() {
Date.prototype.toYMD = Date_toYMD;
function Date_toYMD() {
var year, month, day;
year = String(this.getFullYear());
month = String(this.getMonth() + 1);
if (month.length == 1) {
month = "0" + month;
}
day = String(this.getDate());
if (day.length == 1) {
day = "0" + day;
}
return year + "-" + month + "-" + day;
}
})();
Usage:
var dt = new Date();
var str = dt.toYMD();
Note that the function has a name, which is useful for debugging purposes, but because of the anonymous scoping function there's no pollution of the global namespace.
That uses local time; for UTC, just use the UTC versions (getUTCFullYear
, etc.).
Caveat: I just threw that out, it's completely untested.
Solution 3:
The shortest version of this answer by Chris Mayhew:
/**
* MySQL date
* @param {Date} [date] Optional date object
* @returns {string}
*/
function mysqlDate(date = new Date()) {
return date.toISOString().split('T')[0];
}
const date = mysqlDate();
console.log(date);
Solution 4:
Just edit the string instead:
const date = new Date();
const myDate = date.toISOString().replace("T", " ");
const myDateString = myDate.substring(0, myDate.length - 5);
console.log(myDateString);