content icon indicating copy to clipboard operation
content copied to clipboard

Как не пользоваться библиотеками для работы с датой

Open punkmachine opened this issue 1 year ago • 11 comments

Тема

Собрать частые кейсы форматирования даты и отображения её, показав как их сделать с помощью нативного JS, без использования библиотек.

Думаю, в начале статьи стоит сделать пояснение к тому, почему не стоит использовать библиотеку весом в 73 кб (https://bundlephobia.com/package/[email protected]), когда вам нужно сделать всего 2-3 преобразования дат на проекте.

Раскрыть возможности использования: .toLocaleTimeString(), .toLocaleDateString(), .toLocaleString(), Intl.DateTimeFormat.

Зачем

На самом деле очень часто на любых проектах вижу библиотеки по типу moment.js и т.п., просто для того, чтобы сделать время таким: 19:20, а дату отформатировать вот так: 17 декабря 2023 года.

Хотя это легко делается нативным JS, и даже dayjs становится абсолютно не нужен, хотя он уже хотя бы 3 кб весит, а не 71.

Кто напишет материал

  • [ ] Я сам напишу этот материал

punkmachine avatar Jan 09 '24 02:01 punkmachine

Вообще, можно сделать даже целый цикл статей в рамках спецпроекта наверное с общей темой: "Для этого вам не нужна библиотека". Буду рад услышать мнение редакции на этот счёт.

punkmachine avatar Jan 09 '24 02:01 punkmachine

Вообще, можно сделать даже целый цикл статей в рамках спецпроекта наверное с общей темой: "Для этого вам не нужна библиотека". Буду рад услышать мнение редакции на этот счёт.

Согласна. Очень полезно будет.

TatianaFokina avatar Jan 09 '24 09:01 TatianaFokina

@TatianaFokina хм, какие ещё статьи подобного рода можно написать? у меня из болей только jQuery, lodash и moment.js приходит на ум.

punkmachine avatar Jan 23 '24 11:01 punkmachine

Наверное, можно написать даже что-то вроде: Вам не нужна UI библиотека. Недавно отказывался на одном из проектов от Vuetify, потому что весит дохрена, а 4 странички сверстать на чистом CSS вообще фигня...

punkmachine avatar Jan 23 '24 11:01 punkmachine

@TatianaFokina хм, какие ещё статьи подобного рода можно написать? у меня из болей только jQuery, lodash и moment.js приходит на ум.

Как один из источников можно взять недавнее выступление Никиты Дубко — https://youtu.be/G_GwPX6hM9M

  • компонент accordion на html
  • lazy load картинок и iframe'ов
  • компонент read progress

Отдельно можно добавить про Intl API


Бонус: "вам не нужен бандлер" или "вам не нужен build step" что бы рассказать про то как современная экосистема позволяет делать сложные (относительно) сайты без build step'a

mnik01 avatar Jan 27 '24 20:01 mnik01

Наверное, можно написать даже что-то вроде: Вам не нужна UI библиотека. Недавно отказывался на одном из проектов от Vuetify, потому что весит дохрена, а 4 странички сверстать на чистом CSS вообще фигня...

Можно ещё, кстати, про всякие Bootstrap/Tailwind тоже рассказать. Когда можно использовать, когда не целесообразно. Наверное, я бы даже не в формате рецепта это делала, а в разделе Веб-платформа. И можно расширить тему до того, когда достаточно нативных возможностей языков, а когда реально использовать фреймворки/библиотеки. Можно даже серией сделать. Для JS, для CSS/HTML.

TatianaFokina avatar Jan 29 '24 10:01 TatianaFokina

Итого (схематично) получается:

  1. Работа с датой без библиотек.
  2. HTML-компоненты, которые можно не заменять div-ками. Сюда dialog, сюда select и остальные теги, которые часто заменяют, но это не всегде необходимо.
  3. Вам не нужен бандлер.
  4. Вам нужен build step.
  5. Вам нужен Bootstrap.
  6. Вам не нужен Lodash.
  7. Вам не нужна jQuerry.

Над названия нужно поработать будет, но кажется серия вырисовывается. Это то, что подымалось выше.

Думаю добавить ещё: Вам не нужны React/Vue, Вам не нужен axios, Вам не нужна ORM, Вам не нужна qs, Вам не нужен State Manager, Вам не нужен Vue/React Router, Вам не нужен UUID, что думаете?

И, такой вопрос. Я могу взяться за написание этой серии с середины апреля. По идее можно закрепить эту серию за мной, чтобы я написал большую часть вышеозвученного. Мне хочется это сделать, но мой перформанс не сильно велик. Если это не помешает, то с радостью напишу!

punkmachine avatar Mar 07 '24 00:03 punkmachine

"Вам не нужно то", "вам не нужно это" 😄 Нигилистичный цикл статей

Надо будет правильно расставить акценты, что — выше приведённые технологии могут быть и нужны в ряде кейсов) А то можно подумать что во фронте ничего и не надо :)

mnik01 avatar Mar 07 '24 08:03 mnik01

@mnik01 ну я то и хотел, да.

Т.е. контекст статей будет таким: Вот для этого вам не нужна библиотека для работы с датой. Вот тут вам понадобтся библиотека для работы с датой. Вот советы по выбору библиотеки для работы с датой и аргументы, почему именно они.

punkmachine avatar Mar 07 '24 09:03 punkmachine

Думаю, в начале статьи стоит сделать пояснение к тому, почему не стоит использовать библиотеку весом в 73 кб (https://bundlephobia.com/package/[email protected]), когда вам нужно сделать всего 2-3 преобразования дат на проекте.

Тут скорее стоит сравнивать с dayjs. А то с moment, который давно deprecated, слишком нечестное сравнение.


Вообще часто либа для работы с датами — это либо транзитивная зависимость в UI китах, либо необходимость, например для работы с таймзонами или разницы между датами. Для второго случая, конечно, можно написать свои хелперы, но в итоге мы реализуем уже готовый функционал какой-либо библиотеки, при єтом наш код будет менее оттестирован.

В целом, я думаю, что вопрос "подключать библиотеку для работы с датами и писать на ванилле" решится сам собой, поскольку сейчас на стадии 3 находится более удобное API для работы со временем Temporal API.

Лично я думаю попробовать перейти на него, как только его поддержит Хром. А браузерам без поддержки можно загрузить полифил.

baileys-li avatar Apr 25 '24 14:04 baileys-li

Тут скорее стоит сравнивать с dayjs. А то с moment, который давно deprecated, слишком нечестное сравнение.

Поспорю. Многим разработчикам не донесли, что он depreceted. На старых проектах, на которых я сидел, она осталась как легаси, там ещё понятно. Но на новых проектах, которые были сделаны совсем недавно - встречаю ту же проблему. По какой-то причине все игнорируют dayjs, ставя moment. Возможно потому что в гугле moment первее по их запросу, не знаю.

Но это личной мой опыт работы, так что тут могу ошибаться на счёт общей картины вещей.

punkmachine avatar Apr 26 '24 08:04 punkmachine

Возьму себе. В целом, думаю актуально будет вернуться к обсуждению, и решить, как из этого сделать серию, о которой в комментах говорили. Идеи были вот такие примерно:

Итого (схематично) получается:

  1. Работа с датой без библиотек.
  2. HTML-компоненты, которые можно не заменять div-ками. Сюда dialog, сюда select и остальные теги, которые часто заменяют, но это не всегде необходимо.
  3. Вам не нужен бандлер.
  4. Вам нужен build step.
  5. Вам нужен Bootstrap.
  6. Вам не нужен Lodash.
  7. Вам не нужна jQuerry.

Помогите определиться с составом серии и названиями, я возьмусь за сами статьи)). У меня с названиями всегда беда.

punkmachine avatar Dec 14 '24 13:12 punkmachine