如何将时间JS时间插入MySQL

时间:2014-09-25 20:42:39

标签: javascript php mysql node.js momentjs

//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中的note列是" datetime"类型。

  

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

7 个答案:

答案 0 :(得分:52)

之所以会出现此结果,是因为您使用的是toISOString()方法,并且该格式不适合插入DATETIME列。正确的格式可能YYYY-MM-DD HH:MM:SS(我认为这取决于MySQL配置,但这是默认值),因为docs指出。

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

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

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

答案 1 :(得分:22)

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

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

另外,你应该在PHP之前检查javascript发送的值,用PHP进行查询:

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

如果日期格式错误,将返回false

答案 2 :(得分:4)

要生成mysql格式的日期时间,您可以使用:

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

答案 3 :(得分:3)

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

答案 4 :(得分:3)

(我正在使用Node.js,Express和MySql,这对我有用:)

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

答案 5 :(得分:1)

我认为这是正确的格式。否则你会在你的会议记录中插入月份,并且你也可以获得超过60秒的秒数。

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

使用Moment.js 2.9.0在Chrome中测试

答案 6 :(得分:0)

这是一个功能扩展,可将其格式化为MySQL DateTime格式

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

您将能够做到:moment().toMySqlDateTime();