2014-09-25 12 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)... 

To jest błąd, który otrzymuję po wstawieniu, kolumna notatek w Mysql jest typem "datetime".Jak wstawić moment JS do 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

Który typ danych kolumna jest? – DontVoteMeDown

+0

w Mysql, kolumna jest typu "datetime". – user1529412

Odpowiedz

42

Ten wynik dzieje ponieważ używasz metody toISOString() i to nie jest poprawnym formacie wstawić do kolumny DATETIME. Poprawny format prawdopodobnie jest YYYY-MM-DD HH:MM:SS (myślę, że to zależy od konfiguracji MySQL, ale jest to domyślne), jak wskazuje docs.

Więc powinieneś spróbować użyć format() metodę chwilę tak:

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

W rzeczywistości, nie wiem co data.myTime jest, ale jeśli jego przedmiot chwila zbyt można zmienić pierwszy format() metody i usuń drugi.

+0

Linia daliście mi daje mi obiekt: {_isAMomentObject: true, _I: '24.09.2014', _F: niezdefiniowane, _l: niezdefiniowane, _strict: niezdefiniowane, _isUTC: false, _pf : {puste: fałszywe unusedTokens: [], unusedInput: [], przelew: -2 charsLeftOver: 0, nullInput false, invalidMonth: zerowa, invalidFormat false, userInvalidated: fałszywe iso: false}, _d: śro 24 września 2014 00:00:00 GMT-0400 (EDT), _jest Ważne: true} – user1529412

+0

@ user1529412 well, powinno zwrócić ciąg znaków. – DontVoteMeDown

+0

Zwróć uwagę na moje oryginalne dane.MyTime jest obiektem sama tak: {_isAMomentObject: true, _I: '24.09.2014', _F: niezdefiniowane, _l: niezdefiniowane, _strict: niezdefiniowane, _isUTC: false, _pf: {pusty false, unusedTokens: [], unusedInput: [], przelew: -2 charsLeftOver: 0, nullInput false, invalidMonth: zerowa, invalidFormat false, userInvalidated false, izo false }, _d: śro 24 września 2014 00:00:00 GMT-0400 (EDT)} – user1529412

18

DontVoteMeDown answer ma rację, chyba że protokół 'mm' i sekundy 'ss' muszą być pisane małymi literami, inaczej źle wartość zwracana jest:

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

Ponadto, należy sprawdzić wartość wysłaną przez javascript przed zrobić swoje zapytań SQL w PHP:

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

wrócimy false jeśli data jest misformatted.

1

Myślę, że to jest poprawny format. W przeciwnym razie można dostać miesiące włożona do minut, a można również uzyskać sekund powyżej 60.

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

Testowane w Chrome z Moment.js 2.9.0

2

Aby wygenerować mysql formacie datetime można użyć tego:

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") 
Powiązane problemy