如何将JS时间插入到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)... 

这是插入后得到的错误,Mysql中的注释列是“date时间”types。

MySQL错误:: {[错误:ER_TRUNCATED_WRONG_VALUE:不正确的date时间值:'2014-09- 24T04:09:00.000Z'列'_dateColumn'在第1行]代码:'ER_TRUNCATED_WRONG_VALUE',

       

网上收集的解决方案 "如何将JS时间插入到MySQL中"

发生这种结果是因为您正在使用toISOString()方法,而且它不是插入到DATETIME列的有效格式。 正如文档指出的,正确的格式可能YYYY-MM-DD HH:MM:SS (我认为这取决于MySQLconfiguration,但这是默认设置)。

所以你应该尝试使用像这样的时刻的format()方法:

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

实际上,我不知道data.myTime是什么,但是如果它也是一个片刻对象,那么可以更改第一个format()方法并删除第二个。

DontVoteMeDown答案是正确的,除了分钟'mm'毫秒'mm'和秒'ss'需要小写,否则返回一个错误的值:

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

此外,你应该检查由JavaScript发送的值之前做你的SQL查询,在PHP中:

 DateTime::createFromFormat('Ymd H:i:s', $myDate); 

如果date格式错误,将会返回错误。

要生成MySQL格式的date时间,你可以使用这个:

 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 

我认为这是正确的格式。 否则,你可以在你的分钟里插入几个月,而你也可以在60以上的秒数。

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

在Chrome中使用Moment.js 2.9.0进行testing

 moment().format("YYYY-MM-DD HH:mm:ss")