Comment insérer le moment JS time dans MySQL

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

c'est l'erreur que j'obtiens après l'insertion, note colonne dans Mysql est un type "datetime".

erreur MySQL:: {[Error: ER_TRUNCATED_WRONG_VALUE: Incorrect datetime value: '2014-09 - 24T04: 09: 00.000 Z' pour la colonne '_dateColumn' à la ligne 1] code: "ER_TRUNCATED_WRONG_VALUE",

21
demandé sur DontVoteMeDown 2014-09-26 00:42:38

7 réponses

ce résultat se produit parce que vous utilisez le toISOString() méthode et il n'est pas un format valide à insérer dans votre DATETIME colonne. Le format correct probablementYYYY-MM-DD HH:MM:SS(je pense que cela dépend de la configuration de MySQL, mais c'est la valeur par défaut) que l' docs points.

alors vous devriez essayer d'utiliser le moment format () méthode comme ceci:

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

en fait, je ne sais pas ce que data.myTime est, mais si c'est un moment d'objet, vous pouvez modifier le premier format() méthode et de supprimer la deuxième.

45
répondu DontVoteMeDown 2015-07-08 11:37:48

DontVoteMeDown answer est correct, sauf que le procès-verbal 'mm' et secondes 'ss' doivent être en minuscules, sinon une valeur incorrecte est retourné:

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

en outre, vous devriez vérifier la valeur envoyée par javascript avant de faire votre requête SQL, en PHP:

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

retour false si la date est misformatted.

20
répondu Sheraf 2017-05-23 11:54:53

Pour générer mysql format datetime, vous pouvez utiliser ceci:

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
répondu Salar 2017-05-10 10:28:33
moment().format("YYYY-MM-DD HH:mm:ss")
2
répondu Ashutosh Jha 2017-12-04 12:11:42

je pense que c'est le bon format. Sinon, vous obtenez les mois insérés dans vos minutes, et vous obtenez également des secondes au-dessus de 60.

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

testé dans Chrome avec Moment.js 2.9.0

1
répondu Carlos 2015-02-12 16:04:35

(je travaille avec Node.js, d'Exprimer et de MySql et cela a fonctionné pour moi:)

var momentDate=new moment('2018-08-31T20:13:00.000Z');
var readyToInsert=momentDate.format("YYYY-MM-DD HH:mm:ss");
0
répondu jlizanab 2018-08-31 22:23:06

Voici une extension de fonction pour le formater dans le format de DateTime MySQL

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

Vous serez en mesure de faire: moment().toMySqlDateTime();

0
répondu Yani 2018-09-06 10:06:36