wake-up-neo.com

Wie füge ich die Moment-JS-Zeit in MySQL ein?

//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)...

Dies ist der Fehler, den ich nach dem Einfügen bekomme. Die Spalte in Mysql ist vom Typ "datetime".

MySQL-Fehler :: {[Fehler: ER_TRUNCATED_WRONG_VALUE: Falscher Datums-/Uhrzeitwert: '2014-09-24T04: 09: 00.000Z' für Spalte '_dateColumn' in Zeile 1] Code: 'ER_TRUNCATED_WRONG_VALUE',

27
user1529412

Dieses Ergebnis tritt auf, weil Sie die Methode toISOString() verwenden und kein gültiges Format zum Einfügen in Ihre DATETIME-Spalte ist. Das richtige Format wahrscheinlich ist YYYY-MM-DD HH:MM:SS (Ich denke, es hängt von der MySQL-Konfiguration ab, dies ist jedoch die Standardeinstellung), wie das docs zeigt. 

Daher sollten Sie die format () -Methode von moment wie folgt ausprobieren:

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

Tatsächlich weiß ich nicht, was data.myTime ist, aber wenn es auch ein Momentobjekt ist, können Sie die erste format()-Methode ändern und die zweite Methode entfernen.

49
DontVoteMeDown

DontVoteMeDown answer ist richtig, außer dass die Minuten 'mm' und Sekunden 'ss' in Kleinbuchstaben geschrieben werden müssen, andernfalls wird ein falscher Wert zurückgegeben:

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

Sie sollten auch den von JavaScript gesendeten Wert überprüfen, bevor Sie Ihre SQL-Abfrage in PHP ausführen:

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

Gibt false zurück, wenn das Datum falsch formatiert ist.

22
Sheraf

Zur Generierung des Mysql-Formats können Sie Folgendes verwenden:

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
4
Salar

(Ich arbeite mit Node.js, Express und MySql und das hat für mich funktioniert :)

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

2
jlizanab
moment().format("YYYY-MM-DD HH:mm:ss")
2
Ashutosh Jha

Ich denke, das ist das richtige Format. Ansonsten erhalten Sie die Monate in Ihren Minuten, und Sie erhalten auch Sekunden, die über 60 liegen.

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

Getestet in Chrome mit Moment.js 2.9.0

1
Carlos

Hier ist eine Funktionserweiterung zum Formatieren in das MySQL DateTime-Format

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

Sie können: moment().toMySqlDateTime();

0
Yani