2014-09-25 76 views
19
//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」類型。如何將JS時刻插入到MySQL中

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',

+0

該列是哪種數據類型? – DontVoteMeDown 2014-09-25 20:44:45

+0

在Mysql中,該列是「日期時間」類型。 – user1529412 2014-09-25 20:47:37

回答

42

這樣的結果是因爲你使用的是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()方法刪除第二個。

+0

行,你給我的是給我一個對象:{_isAMomentObject:真實, _i: '2014年9月24日', _f:未定義, _l:未定義, _strict:未定義, _isUTC:假的, _pf : {空:假, unusedTokens:[], unusedInput:[], 溢出:-2, charsLeftOver:0, nullInput:假, invalidMonth:空, invalidFormat:假, userInvalidated:假, iso:false}, _d:Wed Sep 24 2014 00:00:00 GMT-0400(EDT), _is有效:真} – user1529412 2014-09-25 20:57:50

+0

@ user1529412好吧,它應該返回一個字符串。 – DontVoteMeDown 2014-09-25 21:00:36

+0

請注意我的原始數據。數值指明MyTime是對象本身是這樣的:{_isAMomentObject:真, _i: '2014年9月24日', _f:未定義, _l:未定義, _strict:未定義, _isUTC:假, _pf: {空:假, unusedTokens:[], unusedInput:[], 溢出:-2, charsLeftOver:0, nullInput:假, invalidMonth:空, invalidFormat:假, userInvalidated:假, ISO:假}, _d:Wed Sep 24 2014 00:00:00 GMT-0400(EDT)} – user1529412 2014-09-25 21:02:37

18

DontVoteMeDown answer是正確的,只是分'mm',秒'ss'需要用小寫字母,否則將返回錯誤的值:

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

此外,你應該檢查由JavaScript發送的值之前做你的SQL查詢,在PHP中:

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

將返回false如果日期misformatted。

1

我認爲這是正確的格式。否則,你插入你分鐘幾個月,你也可以得到上述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

2

要生成您可以使用此格式的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 
0
moment().format("YYYY-MM-DD HH:mm:ss")