Преобразование даты JS в MySQL и добавление минут
Быстрый ответ
// Трансформация Date объекта JavaScript в формат datetime MySQL: 'ГГГГ-ММ-ДД ЧЧ:ММ:СС'
const toMysqlFormat = (date) => date.toISOString().split('T').join(' ').slice(0, 19);
console.log(toMysqlFormat(new Date())); // Пример вывода: '2023-04-01 12:34:56'
Данная функция позволяет с лёгкостью преобразовать объект Date в соответствующий MySQL формат даты и времени.
Процесс преобразования даты и времени
Давайте разберем, как именно происходит преобразование JavaScript дат в формат datetime для MySQL.
toISOString()
в JavaScript и фомат MySQL
Метод toISOString()
возвращает дату в формате ISO 8601, который нам и нужно привести к формату 'ГГГГ-ММ-ДД ЧЧ:ММ:СС'
.
Учет часовых поясов
Метод toISOString()
возвращает время в UTC. Если вам требуется соблюдать местное время, следует учесть разницу между часовыми поясами:
const toLocalMysqlFormat = (date) => {
const offset = date.getTimezoneOffset() * 60000;
return new Date(date – offset).toISOString().split('T').join(' ').slice(0, 19);
};
Добавление минут: как возникает потребность
Если есть необходимость добавить несколько минут к текущему времени:
const addMinutes = (date, minutes) => new Date(date.getTime() + minutes * 60000);
Применив эту функцию к toMysqlFormat
, мы получим время MySQL с учетом добавленных минут.
Часовые пояса и библиотеки: надежные помощники
Для более точной настройки часовых поясов можно использовать библиотеку moment.js:
const moment = require('moment-timezone');
const date = moment(new Date()).tz('America/New_York').format('ГГГГ-ММ-ДД ЧЧ:мм:сс');
Ищете что-то более легкое и простое? Отличной альтернативой может служить библиотека fecha:
const fecha = require('fecha');
const date = fecha.format(new Date(), 'ГГГГ-ММ-ДД ЧЧ:мм:сс');
Пользуясь этими инструментами, вы без труда справитесь с форматированием дат и управлением часовыми поясами.
Визуализация
Представьте, что у вас есть билет на долгожданное событие:
🎟️ Билет на мероприятие JS: "2023-04-21T18:30:00.000Z"
А вам необходим его эквивалент для MySQL базы данных:
SET @DateToMySQL = STR_TO_DATE('2023-04-21 18:30:00', '%Y-%m-%d %H:%i:%s');
Мы спокойно его трансформируем:
🎟️ Билет на мероприятие JS: "2023-04-21T18:30:00.000Z"
🎫 Пропуск на событие MySQL: "2023-04-21 18:30:00"
Продвинутое преобразование: искусство форматирования
Важно не только быстродействие, но и точность. Обсудим нюансы форматирования для MySQL:
Дополнение цифрами: важность нулей
Каждый элемент даты и времени должен состоять из двух цифр:
// Всё же иногда добавление нулей бывает уместно
const pad = (number) => (number < 10 ? '0' + number : number);
const toMysqlFormatPadded = (date) =>
`${date.getUTCFullYear()}-${pad(date.getUTCMonth() + 1)}-${pad(date.getUTCDate())} ` +
`${pad(date.getUTCHours())}:${pad(date.getUTCMinutes())}:${pad(date.getUTCSeconds())}`;
Пользовательские методы: время волшебства
Расширяя прототип Date, вы можете добавить удобные методы, созданные вами:
// Если бы у Золушки был такой метод, она бы не волновалась о затерянной туфельке
Date.prototype.toMysqlFormat = function() {
return `${this.getFullYear()}-${pad(this.getMonth() + 1)}-${pad(this.getDate())} ` +
`${pad(this.getHours())}:${pad(this.getMinutes())}:${pad(this.getSeconds())}`;
};
Миллисекунды: когда каждая доля важна
Может быть немаловажно сохранить точность до миллисекунд:
const toMysqlFormatWithMillis = (date) =>
`${date.toISOString().split('T').join(' ').slice(0, 22)}`;
Корректировка часовых поясов: будьте актуальны
Чтобы учесть местное время в различных частях света:
const toTimezoneMysqlFormat = (date, timezone) => {
let localDate = new Date(date.toLocaleString('en-US', { timeZone: timezone }));
return toMysqlFormat(localDate);
};
С использованием этих функций вы сможете настроить преобразование дат и времени для любых задач!