So fügen Sie die Moment-JS-Zeit in MySQL ein

Lesezeit: 3 Minuten

Benutzer-Avatar
Benutzer1529412

//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 erhalte. Beachten Sie, dass die Spalte in Mysql vom Typ “datetime” ist.

MySQL-Fehler:: { [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’,

  • Welchen Datentyp hat die Spalte?

    – DontVoteMeDown

    25. September 2014 um 20:44 Uhr

  • In Mysql ist die Spalte vom Typ “datetime”.

    – Benutzer1529412

    25. September 2014 um 20:47 Uhr

Benutzer-Avatar
VoteMeDown nicht

Dieses Ergebnis tritt auf, weil Sie die verwenden toISOString() Methode und es ist kein gültiges Format zum Einfügen in Ihre DATETIME Säule. Das richtige Format wahrscheinlich ist YYYY-MM-DD HH:MM:SS(Ich denke, es hängt von der MySQL-Konfiguration ab, aber dies ist die Standardeinstellung) als die Dokumente weist darauf hin.

Sie sollten also versuchen, Moment’s zu verwenden Format() Methode so:

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

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

  • Die Zeile, die Sie mir gegeben haben, gibt mir ein Objekt:{ _isAMomentObject: true, _i: ‘9-24-2014’, _f: undefined, _l: undefined, _strict: undefined, _isUTC: false, _pf: { empty: false, usedTokens : []unbenutztEingabe: []overflow: -2, charsLeftOver: 0, nullInput: false, invalidMonth: null, invalidFormat: false, userInvalidated: false, iso: false }, _d: Wed Sep 24 2014 00:00:00 GMT-0400 (EDT), _isValid : Stimmt }

    – Benutzer1529412

    25. September 2014 um 20:57 Uhr

  • @ user1529412 Nun, es sollte eine Zeichenfolge zurückgeben.

    – DontVoteMeDown

    25. September 2014 um 21:00 Uhr

  • Beachten Sie, dass meine ursprüngliche data.myTime selbst ein Objekt wie dieses ist: { _isAMomentObject: true, _i: ‘9-24-2014’, _f: undefined, _l: undefined, _strict: undefined, _isUTC: false, _pf: { empty: falsche, ungenutzteTokens: []unbenutztEingabe: []overflow: -2, charsLeftOver: 0, nullInput: false, invalidMonth: null, invalidFormat: false, userInvalidated: false, iso: false }, _d: Wed Sep 24 2014 00:00:00 GMT-0400 (EDT) }

    – Benutzer1529412

    25. September 2014 um 21:02 Uhr

  • YYYY-MM-DD HH:MM:SS sollte sein YYYY-MM-DD HH:mm:ss

    – Tschad Scira

    1. März 2015 um 11:19 Uhr

  • Moment wird ersetzen MM mit dem Monatswert. Versuche dies moment(timeString, 'YYYY/MM/DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');

    – Tschad Scira

    2. März 2015 um 11:49 Uhr


Benutzer-Avatar
Scheraf

DontVoteMeDown-Antwort ist richtig, außer dass das Protokoll 'mm' und Sekunden 'ss' müssen in Kleinbuchstaben geschrieben werden, sonst wird ein falscher Wert zurückgegeben:

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

Außerdem sollten Sie den von Javascript gesendeten Wert überprüfen, bevor Sie Ihre SQL-Abfrage in PHP durchführen:

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

Wird zurückkehren false wenn das Datum falsch formatiert ist.

Benutzer-Avatar
Yani

Hier ist eine Funktionserweiterung, um es in das MySQL DateTime-Format zu formatieren

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

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

  • Ich finde das wirklich bequem zu bedienen.

    – Lalnuntluanga Chhakchhuak

    3. Dezember 2019 um 10:59 Uhr

(Ich arbeite mit Node.js, Express und MySql und das hat bei mir funktioniert 🙂

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

Benutzer-Avatar
Salz

Um Datetime im MySQL-Format zu generieren, 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

Benutzer-Avatar
Ashutosh Jha

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

Benutzer-Avatar
Carlos

Ich denke, das ist das richtige Format. Andernfalls werden die Monate in Ihre Minuten eingefügt, und Sie erhalten auch Sekunden über 60.

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

  • YYYY-MM-DD HH:mm:ss

    – tomexx

    13. Juni 2019 um 15:05 Uhr

1305310cookie-checkSo fügen Sie die Moment-JS-Zeit in MySQL ein

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy