Комментарии 18
Отличается от moment и luxon тем, что в ней используются не объекты-обертки, а чистые функции, работающие с нативным Date.
Не вижу ничего непонятного в этом имени. И в Moment, и в нативном Intl.DateTimeFormat тоже есть метод format.
Более того, с date-fns вы получаете просто набор функций, которые можно переименовать при импорте по своему желанию.
import {format as formatDateByPattern} from 'date-fns';
formatDateByPattern(new Date(2014, 1, 11), 'MM/DD/YYYY');
date_fns.min.js = 70КБ (1.30.1)
mol_time_all.max.js = 20KB (1.1.1)
Речь не про абсолютный размер, а про то что momentjs – это монолит, у вас всегда будет 50Кб, даже если вы используете только 10% API.
Date-fns модульный, берем только отдельные фукнции. Например, мы можем взять startOfWeek, и в бандл попадет только она (600 байт кода). А при использовании startOf('week') из moment, в бандле окажутся все те же 53 Кб целиком.
- Имеет всё те же преимущества, что и Luxon. Даже больше: offset является объектом duration, а не просто числом; интервалы могут задаваться не только двумя датами, но и одной из дат + продолжительность, и всё это правильно сериализуется в ISO, а не в какой-то свой формат с открытыми интервалами; везде, где ожидается момент/интервал/продолжительность может передаваться как объект, так и json с компонентами, так и iso8601 представление.
- Разработана за два месяца одним разработчиком, а не два года шестью.
- Весит 20кб в неминифицированном виде, а не 60 в минифицированном.
- По скорости на порядок быстрее Moment, сомневаюсь, что Luxon сильно быстрее.
Но кому это всё надо? Никому, там же всего полторы сотни звёздочек.
- Для создания интервалов есть несколько разных методов в том числе Interval.after и Interval.before, которые принимают два параметра: дату и продолжительность
- Сериализовать интервал в ISO можно выполнив один метод interval.toISO()
- У Luxon есть методы, которые так же могут принимать разные типы данных — вот, к примеру, описание метода Interval.after:
Interval.after(start: DateTime | Date | Object, duration: Duration | Object | number): Interval
В документации много еще всего есть, если, конечно, интересно.
API Luxon намного больше
А API $mol_time намного меньше, при той же выразительности.
Для создания интервалов есть несколько разных методов
Которые сразу же забывают про переданную продолжительность.
интервал в ISO можно
Только вот это уже будет не тот интервал, что мы создавали. В ISO их 3 вида. И это именно разные сущности с разной семантикой, а не просто 3 способа задать одну сущность. Разница ощущается, когда начинается арифметика, где внезапно оказывается, что месяц — это не всегда 30 дней и тп.
start: DateTime | Date | Object
Как обычно статическая типизация сделана для галочки. Вот так это должно выглядеть:
start : number | Date | string | {
year? : number
month? : number
day? : number
hour? : number
minute? : number
second? : number
offset? : $mol_time_duration_config
}
Размер luxon стоит сравнивать не только с moment+locales, но с moment+locales+moment-timezone
И вот там выигрыши получается настолько большой, что выбор очевиден. (В основном потому что в moment-timezone необходимо грузить БД с таймзонами, а в luxon используется intl API)
В moment.js до сих пор не запилили tree shaking? Как с этим дела у Luxon и date-fns?
В Luxon получше чем у moment, потому что теперь есть 3 отдельные импорты DateTime, Duration, Interval
, вместо одного супер-объекта moment.
У date-fns c этим дела обстоят лучше всех, потому что там экспортируются отдельные функции, как в lodash
Luxon — новая библиотека для работы с датами от команды Moment.js