//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, notez que la colonne dans Mysql est un type "datetime".
Erreur MySQL :: {[Erreur: ER_TRUNCATED_WRONG_VALUE: valeur de date/heure incorrecte: '2014-09-24T04: 09: 00.000Z' pour la colonne '_dateColumn' à la ligne 1] code: 'ER_TRUNCATED_WRONG_VALUE',
Ce résultat est dû au fait que vous utilisez la méthode toISOString()
et que ce n'est pas un format valide à insérer dans votre colonne DATETIME
. Le format correct probablement est YYYY-MM-DD HH:MM:SS
(je pense que cela dépend de la configuration de MySQL, mais c'est la valeur par défaut), comme le souligne docs .
Donc, vous devriez essayer d'utiliser la méthode moment format () 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 aussi un objet moment, vous pouvez changer la première méthode format()
et supprimer la seconde.
DontVoteMeDown answer a raison, sauf que les minutes 'mm'
et secondes 'ss'
doivent être en minuscules, sinon une valeur incorrecte est renvoyée:
myDate = moment(new Date()).format("YYYY-MM-DD HH:mm:ss");
Aussi, 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);
Retournera false
si la date est mal formatée.
Pour générer le format de date mysql, 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
(Je travaille avec Node.js, Express et 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");
moment().format("YYYY-MM-DD HH:mm:ss")
Je pense que c'est le bon format. Sinon, vous insérez les mois dans vos minutes et vous obtenez également des secondes supérieures à 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
Voici une extension de fonction pour le formater au format MySQL DateTime
moment.prototype.toMySqlDateTime = function () {
return this.format('YYYY-MM-DD HH:mm:ss');
};
Vous pourrez faire: moment().toMySqlDateTime();