как добавить 30 минут к объекту date в javascript с учетом часовых поясов

Аватар пользователя Ivan Gagarinov
Ivan Gagarinov
22 декабря 2024

Если вам нужно просто добавить 30 минут к текущему времени или к конкретной дате, вы можете сделать это с помощью метода setMinutes(). Однако этот способ не учитывает временные зоны, поскольку объект Date всегда сохраняет время в UTC и локальное время.

// Создаем объект даты с текущим временем
let currentDate = new Date();

// Добавляем 30 минут
currentDate.setMinutes(currentDate.getMinutes() + 30);

console.log(currentDate);

Если вы хотите отобразить время в определённой временной зоне (например, в часовой зоне пользователя), вы можете использовать Intl.DateTimeFormat. Этот метод не изменяет само значение даты, а лишь форматирует его вывод.

let currentDate = new Date();

// Добавляем 30 минут
currentDate.setMinutes(currentDate.getMinutes() + 30);

// Форматируем дату в определенном часовом поясе, например "America/New_York"
let options = {
    timeZone: 'America/New_York',
    year: 'numeric',
    month: '2-digit',
    day: '2-digit',
    hour: '2-digit',
    minute: '2-digit',
    second: '2-digit',
    hour12: false // 24-часовой формат
};

let formatter = new Intl.DateTimeFormat('en-US', options);
console.log(formatter.format(currentDate));

Библиотека Moment.js и её расширение Moment Timezone позволяют более легко работать с часовыми поясами. Однако стоит отметить, что Moment.js считается устаревшей, и рекомендуется использовать более современные библиотеки, такие как date-fns или Luxon.

Пример с Moment.js:

// Подключаем Moment.js и Moment Timezone
const moment = require('moment-timezone');

// Текущее время
let currentDate = moment();

// Добавляем 30 минут
currentDate.add(30, 'minutes');

// Выводим время в определенном часовом поясе
console.log(currentDate.tz('America/New_York').format('YYYY-MM-DD HH:mm:ss'));

Luxon — это современная библиотека для работы с датами и временем:

const { DateTime } = require('luxon');

// Текущее время в UTC
let currentDate = DateTime.utc();

// Добавляем 30 минут
let newDate = currentDate.plus({ minutes: 30 });

// Выводим в определённой временной зоне
console.log(newDate.setZone('America/New_York').toString());
0 0
Познакомьтесь с основами JavaScript бесплатно