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",
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.
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.
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
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
(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");
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();