TypeScript:
Расчет даты в будущем или прошлом
Как сделать:
// Получить текущую дату
const today: Date = new Date();
// Рассчитать 10 дней в будущем
const tenDaysLater: Date = new Date(today.getTime() + (10 * 24 * 60 * 60 * 1000));
console.log(`Через десять дней будет: ${tenDaysLater.toDateString()}`);
// Рассчитать 10 дней в прошлом
const tenDaysBefore: Date = new Date(today.getTime() - (10 * 24 * 60 * 60 * 1000));
console.log(`Десять дней назад было: ${tenDaysBefore.toDateString()}`);
Пример вывода:
Через десять дней будет: Вс апр 23 2023
Десять дней назад было: Ср апр 03 2023
Подробнее
Исторически управление датами в JavaScript—и, соответственно, в TypeScript—было затруднено из-за особенностей объекта Date и часовых поясов. Альтернативные библиотеки, такие как Moment.js и date-fns, предложили абстракции для обработки этой сложности. С появлением ES6 улучшилась поддержка интернационализации благодаря API Intl
, который также может использовать TypeScript.
При расчете дат следите за изменениями, связанными с переходом на летнее время и секундами высокосных секунд. Такие изменения могут нарушить простые расчеты, например, добавление 24 часов к дате. Также всегда учитывайте локаль и часовой пояс пользователя при отображении рассчитанных дат.
Для широкой совместимости и гибкости вы можете выбрать библиотеки вроде date-fns
или Luxon
, которые модульны и могут быть отличным вариантом для сложных задач. Например, с помощью date-fns
можно легко добавить дни:
import { addDays } from 'date-fns';
const result = addDays(new Date(2023, 3, 13), 10); // 13 апреля 2023 + 10 дней
console.log(result.toDateString());
Они также обрабатывают краевые случаи и проблемы с часовыми поясами, значительно облегчая арифметику дат.