Обновить

Комментарии 22

Как-будто дипломную работу прочитал. К середине уже булькать начал. Но в целом познавательно.

Всё никак не удавалось понять, чем Временный лучше Даты. Но с этой статьёй смысл до меня дошёл. Наконец-то ещё один неизменяемый кирпичик в экосистему JS!

ИИ-комменты теперь и на Хабре?

Живём во время нейро комментаторов и ботов. Шош поделать )

Мне кажется это перевод супергероики в стиле Володарского. Временный против Даты, Желчный против радиоактивных людей

Ночью я мыслю как не очень умная нейросеть, днём - вообще стараюсь не думать.

Бред какой-то. Ваша проблема в том, что вы не хотите менять значение, но меняете? Ну не хотите - не меняйте. Или над вами обязательно дядя с палкой стоять должен?

Новый API выглядит более продуманным, да и похож на аналогичные в других языках. А Date да, к нему так-то давно вопросов накопилось. Неспроста же появились библиотеки moment и date-fns. Возможно теперь от них можно будет избавиться (но это не точно).

Это я не спорю. Что не отменяет того, что основные претензии выглядят неубедительно.

Вроде бы, от moment уже избавились сколько-то лет назад. dayjs появился.

Это всё хорошо, конечно, но уж больно избыточный API, например, как получить utcNow

Стало: Temporal.Now.zonedDateTimeISO('UTC')

Было: new Date()

У вас какая-то квота на кол-во символов?

Квота на время набора + чем больше визуального шума, тем сложнее воспринимать

Вы, видимо, не очень много с датами работали. Как-то странно вы судите об избыточности API используя пример, где Temporal не нужен совсем. React/Vue/Angular тоже какие-то избыточные и непонятно зачем нужны, ведь чтобы отрисовать <div>Hello World!</div> в React надо ~10 строчек кода + килобайты зависимостей + бандлить это всё, хотя можно просто в index.html написать <div>Hello World!</div>

С простого: как получить текущее время в другой таймзоне?
Стало: Temporal.Now.zonedDateTimeISO('Asia/Tokyo')
Было: const dateInTokyo = new Date(
new Date().toLocaleString("en-US", { timeZone: "Asia/Tokyo" })
);

А как получить начало текущего дня в другой таймзоне? А потом перевести её на начало дня в третьей таймзоне? Одна-две строчки в Temporal или несколько часов отладки с Date и оно всё равно криво будет работать

Скажем так, работал много, но, к счастью, на бэкенде, и все эти часовые пояса и DST мне до свечки. UTC везде - вот мой выбор

Никаких возражений, что операции с таймзонами нужны, нет. И Date крайне убог. Но со своей колокольни вижу очень многословный API для простейшего и самого частого действия

используя пример, где Temporal не нужен совсем

Это вы скажите комитету, который уже анонсировал Date как legacy, когда Temporal устаканится

Java в названии надо как-то оправдывать

Было бы интереснее, если бы DateTime и прочее почерпнули из luxon. А то получается, что хотят, как с Intl, под одну гребёнку все завернуть, только в отличии от оного даты используются куда чаще и присутствует некая избыточность синтаксиса.

Я по старинной привычке просто храню и таскаю даты как строки в ISO формате и строго в UTC зоне. Можно сравнивать, они иммутабельны, их можно засунуть в любую библиотеку, JSON и посылать по сети. Использую Date/moment/luxon/dayjs только для операций над датами (вроде вашей add/subtract) или форматирования (Intl), да и то для таких операций всегда лежат заготовленные функции обертки, так что инлайново в коде объекты почти не встретить. Если надоело добавлять дни с помощью moment, можно в обертке заменить на dayjs, прогнать тесты и радоваться.
С TypeScript строки еще и брендированны, так что что попало без валидации не назначить. Требуется boilerplate код, чтобы все нюансы покрыть, но последний раз обновлял код года 3 назад, когда мигрировали с moment на dayjs.
Когда Temporal доберется до повсеместного распространения, вот тогда я просто окончательно избавлюсь от 3rd party библиотек, но от строковых ISO дат, наверное, никогда 😄

UTC рулит

пример из статьи
пример из статьи
что выдала консоль у меня.
что выдала консоль у меня.

поправьте в статье день месяца пожалуйста.

Нет, в статье актуальное поведение JS в таймзоне GMT-5

Я понял посыл автора данной статьи, и вот что я могу сказать по этому поводу (ИМХО и только):

В вашем случае можно использовать тот же dayjs, luxon, momentjs (или любую другую библиотеку), и будет вам счастье, но в остальном - неправильное использование Date не повод для того, чтобы его "хоронить", а повод посмотреть документацию непосредственно к нему, где черным по белому написано - почему month не 1, 2 или 3 (и т.д.), а 0, 1 или 2 (и т.д.).

Лично я во всех проектах, где принимал участие и используется Date, дополнял небольшими dateUtils, в которых хранил helper функции для работы с Date и только те, что необходимы в рамках данного проекта. Без усложнений кода, его читаемости и прочего.

К тому же, не стоит забывать, что есть пользователи со старыми устройствами, где тот же Temporal работать не будет (Chrome до 144 версии, welcome, как пример), особенно устройства Digital Signage, где ES6-то не везде поддерживается и нужно через кучу polyfill пропускать код, а если и поддерживается, то обязательно найдется то, чего он не знает, так как там версии Chromium отстают от актуальных. Как пример: устройство Samsung Digitial Signage 2025 года поддерживает Chromium 120 версии и не выше... (ссылка тут, с указанием года выпуска модели и версии Chromium, что лежит внутри)

Как итог моего монолога:
Выбирайте то, что необходимо вам в рамках ваших задач и целевой аудитории, но никогда не навязывайте своё мнение другим, так как у других могут быть другие задачи и другая целевая аудитория.
А пока Temporal не имеет широкой браузерной поддержки, то пока не достоин столь пристального внимания. Лучше будет обратить на него внимание тогда, когда он будет поддерживаться всеми современными браузерами, и то, с точки зрения интереса "Что за зверь?"...

Мира, любви и жвачки вам :)

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации