Ответ
Работал с date-fns и moment.js.
date-fns — современная, модульная, поддерживает tree-shaking. Пример:
import { format, addDays } from 'date-fns';
const today = new Date();
const tomorrow = addDays(today, 1);
console.log(format(tomorrow, 'yyyy-MM-dd')); // 2023-12-01
moment.js — мощная, но устаревшая (legacy). Пример:
const now = moment();
console.log(now.add(1, 'days').format('YYYY-MM-DD'));
Сейчас предпочитаю date-fns из-за производительности и лучшей интеграции с современным стэком. Для сложных временных зон иногда использую luxon.
Ответ 18+ 🔞
А, ну ты про эти ваши библиотеки для дат! Слушай, я тут тоже с ними воевал, как последний идиот.
Вот смотри, был у меня в проекте этот ваш moment.js — мощный, конечно, как танк, но, блядь, старый уже, как танк времён Первой мировой. Весит — овердохуища, и вроде как его уже в legacy записали, всем советуют на хуй не использовать. А он, зараза, везде засел, как родной. Примерчик его простой, да:
const now = moment();
console.log(now.add(1, 'days').format('YYYY-MM-DD'));
Работает? Работает. Но чувствуешь себя после него, будто на говнокалине едешь — вроде едет, но стыдно как-то, и все вокруг пальцами показывают.
А потом подсунули мне date-fns. И я, сука, от него офигел просто. Он же модульный, как швейцарский нож! Хочешь — только форматирование бери, хочешь — только дни прибавляй. И tree-shaking его обожает — выкидывает всё лишнее нахуй, оставляя только то, что реально юзаешь. Красота же!
import { format, addDays } from 'date-fns';
const today = new Date();
const tomorrow = addDays(today, 1);
console.log(format(tomorrow, 'yyyy-MM-dd')); // 2023-12-01
Чисто, аккуратно, без лишнего говна. И производительность — просто ёперный театр, летает.
Так что сейчас, если выбор есть, я всегда за date-fns. Ну, а если вдруг надо с временными зонами голову сломать, там, всякие "America/New_York" или "Asia/Kamchatka", то иногда лезу в luxon. Он тоже не дурак, с такими сложными случаями справляется. Но для 95% задач — date-fns, мой выбор, иди нахуй, moment!