Подтвердить что ты не робот

Как вставить момент времени JS в 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)...

Это ошибка, которую я получаю после вставки, столбец примечаний в Mysql - это тип "datetime".

Ошибка MySQL:: {[Ошибка: ER_TRUNCATED_WRONG_VALUE: неверное значение даты и времени: '2014-09- 24T04: 09: 00.000Z' для столбца '_dateColumn' в строке 1]     код: 'ER_TRUNCATED_WRONG_VALUE',

4b9b3361

Ответ 1

Этот результат происходит потому, что вы используете метод toISOString(), и он не является допустимым форматом для вставки в столбец DATETIME. Правильный формат, вероятно, YYYY-MM-DD HH:MM:SS (я думаю, это зависит от конфигурации MySQL, но это по умолчанию), как указывает docs.

Итак, вы должны попробовать использовать способ format() в следующем виде:

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

На самом деле, я не знаю, что такое data.myTime, но если это тоже объект объекта, вы можете изменить первый метод format() и удалить второй.

Ответ 2

Ответ 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, если дата неверна.

Ответ 3

Чтобы сгенерировать mysql-формат datetime, вы можете использовать это:

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

Ответ 4

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

Ответ 5

(Я работаю с Node.js, Express и MySql, и это сработало для меня :)

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

Ответ 6

Я думаю, что это правильный формат. В противном случае вы получите месяцы, вставленные в ваши минуты, и вы также получите секунды выше 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

Ответ 7

Здесь расширение функции для форматирования его в формат MySQL DateTime

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

Вы сможете сделать: moment().toMySqlDateTime();