//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)...
Это ошибка, которую я получаю после вставки, столбец примечаний в Mysql имеет тип «datetime».
Ошибка MySQL :: {[Ошибка: ER_TRUNCATED_WRONG_VALUE: Неверное значение даты и времени: «2014-09-24T04: 09: 00.000Z» для столбца «_dateColumn» в строке 1] код: «ER_TRUNCATED_WRONG_VALUE»,
Этот результат происходит потому, что вы используете toISOString()
метод, и это не правильный формат для вставки в DATETIME
колонка. Правильный формат наверное является YYYY-MM-DD HH:MM:SS
(Я думаю, что это зависит от конфигурации MySQL, но это по умолчанию), как документы указывает на то.
Так что вы должны попробовать использовать момент формат() метод как это:
myDate = moment(data.myTime.format('YYYY/MM/DD HH:mm:ss')).format("YYYY-MM-DD HH:mm:ss");
На самом деле, я не знаю, что data.myTime
есть, но если это моментальный объект, вы можете изменить первый format()
метод и удали второй.
DontVoteMeDown ответ верно, кроме того, что протокол 'mm'
и секунды 'ss'
должен быть в нижнем регистре, в противном случае возвращается неправильное значение:
myDate = moment(new Date()).format("YYYY-MM-DD HH:mm:ss");
Кроме того, вы должны проверить значение, отправленное javascript, прежде чем выполнять SQL-запрос в PHP:
DateTime::createFromFormat('Y-m-d H:i:s', $myDate);
Вернусь false
если дата не отформатирована.
Для создания даты и времени в формате MySQL вы можете использовать это:
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
moment().format("YYYY-MM-DD HH:mm:ss")
(Я работаю с Node.js, Express и MySql, и это сработало для меня 🙂
var momentDate=new moment('2018-08-31T20:13:00.000Z');
var readyToInsert=momentDate.format("YYYY-MM-DD HH:mm:ss");
Я думаю, что это правильный формат. В противном случае вы получаете месяцы, вставленные в ваши минуты, а также секунды, превышающие 60.
myDate = moment(data.myTime.format('YYYY/MM/DD HH:MM:ss')).format("YYYY-MM-DD HH:MM:SS");
Протестировано в Chrome с Moment.js 2.9.0
Вот расширение функции, чтобы отформатировать это в формат MySQL DateTime
moment.prototype.toMySqlDateTime = function () {
return this.format('YYYY-MM-DD HH:mm:ss');
};
Вы сможете сделать: moment().toMySqlDateTime();