ПРИХОДИТЕ УЧИТЬСЯ НОВОЙ ПРОФЕССИИ ЛЕТОМ СО СКИДКОЙ ДО 70%Забронировать скидку

Преобразование даты JS в MySQL и добавление минут

Пройдите тест, узнайте какой профессии подходите и получите бесплатную карьерную консультацию
В конце подарим скидку до 55% на обучение
Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

JS
Скопировать код
// Трансформация 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 формат даты и времени.

Пройдите тест и узнайте подходит ли вам сфера IT
Пройти тест

Процесс преобразования даты и времени

Давайте разберем, как именно происходит преобразование JavaScript дат в формат datetime для MySQL.

toISOString() в JavaScript и фомат MySQL

Метод toISOString() возвращает дату в формате ISO 8601, который нам и нужно привести к формату 'ГГГГ-ММ-ДД ЧЧ:ММ:СС'.

Учет часовых поясов

Метод toISOString() возвращает время в UTC. Если вам требуется соблюдать местное время, следует учесть разницу между часовыми поясами:

JS
Скопировать код
const toLocalMysqlFormat = (date) => {
  const offset = date.getTimezoneOffset() * 60000;
  return new Date(date – offset).toISOString().split('T').join(' ').slice(0, 19);
};

Добавление минут: как возникает потребность

Если есть необходимость добавить несколько минут к текущему времени:

JS
Скопировать код
const addMinutes = (date, minutes) => new Date(date.getTime() + minutes * 60000);

Применив эту функцию к toMysqlFormat, мы получим время MySQL с учетом добавленных минут.

Часовые пояса и библиотеки: надежные помощники

Для более точной настройки часовых поясов можно использовать библиотеку moment.js:

JS
Скопировать код
const moment = require('moment-timezone');
const date = moment(new Date()).tz('America/New_York').format('ГГГГ-ММ-ДД ЧЧ:мм:сс');

Ищете что-то более легкое и простое? Отличной альтернативой может служить библиотека fecha:

JS
Скопировать код
const fecha = require('fecha');
const date = fecha.format(new Date(), 'ГГГГ-ММ-ДД ЧЧ:мм:сс');

Пользуясь этими инструментами, вы без труда справитесь с форматированием дат и управлением часовыми поясами.

Визуализация

Представьте, что у вас есть билет на долгожданное событие:

Markdown
Скопировать код
🎟️ Билет на мероприятие JS: "2023-04-21T18:30:00.000Z"

А вам необходим его эквивалент для MySQL базы данных:

SQL
Скопировать код
SET @DateToMySQL = STR_TO_DATE('2023-04-21 18:30:00', '%Y-%m-%d %H:%i:%s');

Мы спокойно его трансформируем:

Markdown
Скопировать код
🎟️ Билет на мероприятие JS: "2023-04-21T18:30:00.000Z"
🎫 Пропуск на событие MySQL: "2023-04-21 18:30:00"

Продвинутое преобразование: искусство форматирования

Важно не только быстродействие, но и точность. Обсудим нюансы форматирования для MySQL:

Дополнение цифрами: важность нулей

Каждый элемент даты и времени должен состоять из двух цифр:

JS
Скопировать код
// Всё же иногда добавление нулей бывает уместно
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, вы можете добавить удобные методы, созданные вами:

JS
Скопировать код
// Если бы у Золушки был такой метод, она бы не волновалась о затерянной туфельке
Date.prototype.toMysqlFormat = function() {
  return `${this.getFullYear()}-${pad(this.getMonth() + 1)}-${pad(this.getDate())} ` +
    `${pad(this.getHours())}:${pad(this.getMinutes())}:${pad(this.getSeconds())}`;
};

Миллисекунды: когда каждая доля важна

Может быть немаловажно сохранить точность до миллисекунд:

JS
Скопировать код
const toMysqlFormatWithMillis = (date) => 
  `${date.toISOString().split('T').join(' ').slice(0, 22)}`;

Корректировка часовых поясов: будьте актуальны

Чтобы учесть местное время в различных частях света:

JS
Скопировать код
const toTimezoneMysqlFormat = (date, timezone) => {
  let localDate = new Date(date.toLocaleString('en-US', { timeZone: timezone }));
  return toMysqlFormat(localDate);
};

С использованием этих функций вы сможете настроить преобразование дат и времени для любых задач!

Полезные материалы

  1. Date.prototype.toISOString() – JavaScript | MDN
  2. Справочник объекта Date в JavaScript
  3. MySQL :: Руководство по ссылке MySQL 8.0 :: 14.7 Функции даты и времени
  4. ISO 8601 – Википедия
  5. Документация Moment.js
  6. date-fns – современная JavaScript библиотека утилит для работы с датами
  7. Блог date-fns