How to insert moment JS time into MySQL

//In Node/JS
myDate = moment(data.myTime.format('YYYY/MM/DD HH:MM:SS')).toISOString();
//myDate shows '2014-09-24T04:09:00.000Z'

Insert INTO (dateColumn..) Values(myDate)...

This is the error I get after inserting, note column in Mysql is a "datetime" type.

MySQL Error:: { [Error: ER_TRUNCATED_WRONG_VALUE: Incorrect datetime value: '2014-09- 24T04:09:00.000Z' for column '_dateColumn' at row 1] code: 'ER_TRUNCATED_WRONG_VALUE',


This result happens because you are using the toISOString() method and it is not a valid format to insert into your DATETIME column. The correct format probably is YYYY-MM-DD HH:MM:SS(I think it depends on MySQL configuration, but this is the default) as the docs points out.

So you should try using moment's format() method like this:

myDate =  moment(data.myTime.format('YYYY/MM/DD HH:mm:ss')).format("YYYY-MM-DD HH:mm:ss");

In fact, I don't know what data.myTime is, but if its a moment object too, you can change the first format() method and remove the second one.


DontVoteMeDown answer is right, except that the minutes 'mm' and seconds 'ss' need to be in lowercase, otherwise a wrong value is returned:

myDate =  moment(new Date()).format("YYYY-MM-DD HH:mm:ss");

Also, you should check the value sent by javascript before to do your SQL query, in PHP:

DateTime::createFromFormat('Y-m-d H:i:s', $myDate);

Will return false if the date is misformatted.


Here's a function extension to format it into the MySQL DateTime format

moment.prototype.toMySqlDateTime = function () {
    return this.format('YYYY-MM-DD HH:mm:ss');
};

You'll be able to do: moment().toMySqlDateTime();


(I'm working with Node.js, Express and MySql and this has worked for me:)

var momentDate=new moment('2018-08-31T20:13:00.000Z');
var readyToInsert=momentDate.format("YYYY-MM-DD HH:mm:ss");

To generate mysql format datetime you can use this:

var moment = require('moment');
let currentTimestamp = moment().unix();//in seconds
let currentDatetime = moment(currentTimestamp*1000).format("YYYY-MM-DD HH:mm:ss");//mysql datetime.
currentTimestamp = moment(currentDatetime).valueOf();//current timestamp in milliseconds