Moment.js ist eine fantastische Bibliothek für Zeit und Datum mit vielen großartigen Funktionen und Dienstprogrammen. Wenn Sie jedoch an einer leistungsempfindlichen Webanwendung arbeiten, kann dies aufgrund seiner komplexen APIs und seiner großen Bündelgröße zu einem enormen Leistungsaufwand führen.

Probleme mit moment.js:
a.subtract('ms', 50) , a.subtract(50, 'ms') und sogar a.subtract('s', '50') .Wenn Sie TimeZone nicht verwenden, sondern nur wenige einfache Funktionen ab Moment.JS, kann dies Ihre App aufblähen und daher als Overkill angesehen werden. Dayjs hat einen kleineren Kern und sehr ähnliche APIs, sodass es sehr einfach ist, zu migrieren. Date-FNS ermöglicht Baumschütteln und andere Vorteile, damit es mit React, Sinon.js und Webpack usw. hervorragend funktioniert
| Name | Baumschütteln | Methodenreichtum | Muster | Gebietsschema | Timezone -Unterstützung | Popularität (Sterne) | Größen |
|---|---|---|---|---|---|---|---|
| Moment.js | NEIN | Hoch | Oo | 123 | Gut (Moment-Zeitzone) | ||
| Luxon | NEIN | Hoch | Oo | - - | Gut (intl) | ||
| Date-Fns | Ja | Hoch | Funktional | 64 | Gut (Date-Fns-TZ) | ||
| Tag | NEIN | Hoch | Oo | 138 | Gut (intl) |
Entfernung moment.js zu ersetzen durch date -fns - bauen protoution reduziert um 40%
- Jared Farago vom WebNode -Projekt.
Gute Bibliothek, wenn Sie moment.js aus dem einen oder anderen Grund ersetzen möchten. Unveränderlich auch.
-Dan Abramov, Autor von Redux und Co-Autor von Create React App. Building -Werkzeuge für Menschen.
Ich empfehle dringend, Date-Fns im Moment zu verwenden.
—Matija marohnić, ein design-versierter Frontend-Entwickler aus Kroatien.
Wenn Sie Eslint verwenden, können Sie ein Plugin installieren, mit dem Sie Orte in Ihrem Codebasis identifizieren können, an denen Sie einen Moment nicht benötigen.
Installieren Sie das Plugin ...
npm install --save-dev eslint-plugin-you-dont-need-momentjs... Dann aktualisieren Sie Ihre Konfiguration
"extends" : [ "plugin:you-dont-need-momentjs/recommended" ] , Analysieren
Holen Sie sich + einstellen
Manipulieren
Anzeige
Abfrage
| Einheimisch | Luxon | Date-Fns | Tag | Zeitlich | |
|---|---|---|---|---|---|
| Analysieren | |||||
| Zeichenfolge + Datumsformat | ✅ | ✅ | ✅ | ✅ | ✅ |
| Zeichenfolge + Zeitformat | ✅ | ✅ | ✅ | ✅ | |
| String + Format + Gebietsschema | ✅ | ||||
| Holen Sie sich + einstellen | |||||
| Millisekunden-/Sekunde/Minute/Stunde | ✅ | ✅ | ✅ | ✅ | ✅ |
| Monatsdatum | ✅ | ✅ | ✅ | ✅ | ✅ |
| Woche der Woche | ✅ | ✅ | ✅ | ✅ | ✅ |
| Tag des Jahres | ✅ | ✅ | ✅ | ✅ | ✅ |
| Jahreswoche | ✅ | ✅ | ✅ | ✅ | |
| Tage im Monat | ✅ | ✅ | ✅ | ✅ | ✅ |
| Wochen im Jahr | ✅ | ✅ | |||
| Maximum der angegebenen Daten | ✅ | ✅ | ✅ | ✅ | |
| Minimum der angegebenen Daten | ✅ | ✅ | ✅ | ✅ | |
| Manipulieren | |||||
| Hinzufügen | ✅ | ✅ | ✅ | ✅ | ✅ |
| Subtrahieren | ✅ | ✅ | ✅ | ✅ | ✅ |
| Zeitanfang | ✅ | ✅ | ✅ | ✅ | |
| Zeitende | ✅ | ✅ | ✅ | ✅ | ✅ |
| Anzeige | |||||
| Format | ✅ | ✅ | ✅ | ✅ | ✅ |
| Zeit in der Zeit | ✅ | ✅ | ✅ | ||
| Zeit von x | ✅ | ✅ | |||
| Unterschied | ✅ | ✅ | ✅ | ✅ | ✅ |
| Abfrage | |||||
| Ist vorher | ✅ | ✅ | ✅ | ✅ | ✅ |
| Ist gleich | ✅ | ✅ | ✅ | ✅ | ✅ |
| Ist nach | ✅ | ✅ | ✅ | ✅ | ✅ |
| Ist dazwischen | ✅ | ✅ | |||
| Ist Schaltjahr | ✅ | ✅ | ✅ | ✅ | |
| Ist ein Datum | ✅ | ✅ | ✅ | ✅ | ✅ |
Geben Sie das Datum mit der angegebenen Formatzeichenfolge aus der Datumszeichenfolge an.
// Moment.js
moment ( '12-25-1995' , 'MM-DD-YYYY' ) ;
// => "1995-12-24T13:00:00.000Z"
// Native
const datePattern = / ^(d{2})-(d{2})-(d{4})$ / ;
const [ , month , day , year ] = datePattern . exec ( '12-25-1995' ) ;
new Date ( ` ${ month } , ${ day } ${ year } ` ) ;
// => "1995-12-24T13:00:00.000Z"
// date-fns
import parse from 'date-fns/parse' ;
parse ( '12-25-1995' , 'MM-dd-yyyy' , new Date ( ) ) ;
// => "1995-12-24T13:00:00.000Z"
// dayjs
dayjs ( '12-25-1995' ) ;
// => "1995-12-24T13:00:00.000Z"
// luxon
DateTime . fromFormat ( '12-25-1995' , 'MM-dd-yyyy' ) . toJSDate ( ) ;
// => "1995-12-24T13:00:00.000Z"
// Temporal
const datePattern = / ^(d{2})-(d{2})-(d{4})$ / ;
const [ , month , day , year ] = datePattern . exec ( '12-25-1995' ) ;
new Temporal . ZonedDateTime . from ( { year , month , day , timeZone : Temporal . Now . timeZone ( ) } ) ;
// => "1995-12-24T13:00:00.000Z"⬆ Zurück nach oben
Geben Sie das Datum an der Zeitzeichenfolge mit der angegebenen Formatzeichenfolge zurück.
// Moment.js
moment ( '2010-10-20 4:30' , 'YYYY-MM-DD HH:mm' ) ;
// => "2010-10-19T17:30:00.000Z"
// Native
const datePattern = / ^(d{4})-(d{2})-(d{2})s(d{1,2}):(d{2})$ / ;
const [ , year , month , day , rawHour , min ] = datePattern . exec ( '2010-10-20 4:30' ) ;
new Date ( ` ${ year } - ${ month } - ${ day } T ${ ( '0' + rawHour ) . slice ( - 2 ) } : ${ min } :00` ) ;
// => "2010-10-19T17:30:00.000Z"
// date-fns
import parse from 'date-fns/parse' ;
parse ( '2010-10-20 4:30' , 'yyyy-MM-dd H:mm' , new Date ( ) ) ;
// => "2010-10-19T17:30:00.000Z"
// dayjs ️ requires customParseFormat plugin
import customParseFormat from 'dayjs/plugin/customParseFormat' ;
dayjs . extend ( customParseFormat ) ;
dayjs ( '2010-10-20 4:30' , 'YYYY-MM-DD HH:mm' ) ;
// => "2010-10-19T17:30:00.000Z"
// luxon
DateTime . fromFormat ( '2010-10-20 4:30' , 'yyyy-MM-dd H:mm' ) . toJSDate ( ) ;
// => "2010-10-19T17:30:00.000Z"
// Temporal
const datePattern = / ^(d{4})-(d{2})-(d{2})s(d{1,2}):(d{2})$ / ;
const [ , year , month , day , hour , minute ] = datePattern . exec ( '2010-10-20 4:30' ) ;
new Temporal . ZonedDateTime . from ( { year , month , day , hour , minute , timeZone : Temporal . Now . timeZone ( ) } ) ;
// => "2010-10-19T17:30:00.000Z"⬆ Zurück nach oben
Geben Sie das Datum mit der angegebenen Formatzeichenfolge und dem Gebietsschema an.
// Moment.js
moment ( '2012 mars' , 'YYYY MMM' , 'fr' ) ;
// => "2012-02-29T13:00:00.000Z"
// date-fns
import parse from 'date-fns/parse' ;
import fr from 'date-fns/locale/fr' ;
parse ( '2012 mars' , 'yyyy MMMM' , new Date ( ) , { locale : fr } ) ;
// => "2012-02-29T13:00:00.000Z"
// dayjs ️ requires customParseFormat plugin
import customParseFormat from 'dayjs/plugin/customParseFormat' ;
import 'dayjs/locale/fr' ;
dayjs . extend ( customParseFormat ) ;
dayjs ( '2012 mars' , 'YYYY MMM' , 'fr' ) ;
// => "2012-02-29T13:00:00.000Z"
// Luxon does not support Locale for node unless https://moment.github.io/luxon/docs/manual/install.html#node
DateTime . fromFormat ( '2012 mars' , 'yyyy MMMM' , { locale : 'fr' } ) ;
// => "2012-02-29T13:00:00.000Z"⬆ Zurück nach oben
Holen Sie sich die Millisecond/Second/Minute/Hour des angegebenen Datums.
// Moment.js
moment ( ) . seconds ( ) ;
// => 49
moment ( ) . hours ( ) ;
// => 19
// Native
new Date ( ) . getSeconds ( ) ;
// => 49
new Date ( ) . getHours ( ) ;
// => 19
// date-fns
import getSeconds from 'date-fns/getSeconds' ;
import getHours from 'date-fns/getHours' ;
getSeconds ( new Date ( ) ) ;
// => 49
getHours ( new Date ( ) ) ;
// => 19
// dayjs
dayjs ( ) . second ( ) ;
// => 49
dayjs ( ) . hour ( ) ;
// => 19
// Luxon
DateTime . local ( ) . second ;
// => 49
DateTime . local ( ) . hour ;
// => 19
// Temporal
Temporal . Now . zonedDateTimeISO ( ) . second ;
// => 49
Temporal . Now . zonedDateTimeISO ( ) . hour ;
// => 19| Bibliothek | Zeit |
|---|---|
| Moment | 1500.703 ms |
| Einheimisch | 348.411m |
| DateFns | 520.670 ms |
| Tag | 494.234ms |
| Luxon | 1208.368ms |
| Zeitlich | - - |
Stellen Sie die Millisecond/Second/Minute/Hour des angegebenen Datums ein.
// Moment.js
moment ( ) . seconds ( 30 ) ;
// => "2018-09-09T09:12:30.695Z"
moment ( ) . hours ( 13 ) ;
// => "2018-09-09T03:12:49.695Z"
// Native
new Date ( new Date ( ) . setSeconds ( 30 ) ) ;
// => "2018-09-09T09:12:30.695Z"
new Date ( new Date ( ) . setHours ( 13 ) ) ;
// => "2018-09-09T03:12:49.695Z"
// date-fns
import setSeconds from 'date-fns/setSeconds' ;
import setHours from 'date-fns/setHours' ;
setSeconds ( new Date ( ) , 30 ) ;
// => "2018-09-09T09:12:30.695Z"
setHours ( new Date ( ) , 13 ) ;
// => "2018-09-09T03:12:49.695Z"
// dayjs
dayjs ( ) . set ( 'second' , 30 ) ;
// => "2018-09-09T09:12:30.695Z"
dayjs ( ) . set ( 'hour' , 13 ) ;
// => "2018-09-09T03:12:49.695Z"
// luxon
DateTime . utc ( )
. set ( { second : 30 } )
. toJSDate ( ) ;
// => "2018-09-09T09:12:30.695Z"
DateTime . utc ( )
. set ( { hour : 13 } )
. toJSDate ( ) ;
// => "2018-09-09T03:12:49.695Z"
// Temporal
Temporal . Now . zonedDateTimeISO ( ) . with ( { second : 30 } ) ;
// => "2018-09-09T09:12:30.695Z"
Temporal . Now . zonedDateTimeISO ( ) . with ( { hour : 13 } ) ;
// => "2018-09-09T03:12:49.695Z"| Bibliothek | Zeit |
|---|---|
| Moment | 1689.744ms |
| Einheimisch | 636.741ms |
| DateFns | 714.148ms |
| Tag | 2037.603ms |
| Luxon | 2897.571ms |
| Zeitlich | - - |
⬆ Zurück nach oben
Bekommt oder legt den Tag des Monats fest.
// Moment.js
moment ( ) . date ( ) ;
// => 9
moment ( ) . date ( 4 ) ;
// => "2018-09-04T09:12:49.695Z"
// Native
new Date ( ) . getDate ( ) ;
// => 9
new Date ( ) . setDate ( 4 ) ;
// => "2018-09-04T09:12:49.695Z"
// date-fns
import getDate from 'date-fns/getDate' ;
import setDate from 'date-fns/setDate' ;
getDate ( new Date ( ) ) ;
// => 9
setDate ( new Date ( ) , 4 ) ;
// => "2018-09-04T09:12:49.695Z"
// dayjs
dayjs ( ) . date ( ) ;
// => 9
dayjs ( ) . set ( 'date' , 4 ) ;
// => "2018-09-04T09:12:49.695Z"
// luxon
DateTime . utc ( ) . day ;
// => 9
DateTime . utc ( )
. set ( { day : 4 } )
. toString ( ) ;
// => "2018-09-04T09:12:49.695Z"
// Temporal
Temporal . Now . zonedDateTimeISO ( ) . day ;
// => 9
Temporal . Now . zonedDateTimeISO ( ) . with ( { day : 4 } ) ;
// => "2018-09-04T09:12:49.695Z"| Bibliothek | Zeit |
|---|---|
| Moment | 1381.669ms |
| Einheimisch | 397.415ms |
| DateFns | 588.004ms |
| Tag | 1218.025 ms |
| Luxon | 2705.606 ms |
| Zeitlich | - - |
⬆ Zurück nach oben
Bekommt oder setzt den Wochentag.
// Moment.js
moment ( ) . day ( ) ;
// => 0 (Sunday)
moment ( ) . day ( - 14 ) ;
// => "2018-08-26T09:12:49.695Z"
// Native
new Date ( ) . getDay ( ) ;
// => 0 (Sunday)
new Date ( ) . setDate ( new Date ( ) . getDate ( ) - 14 ) ;
// => "2018-08-26T09:12:49.695Z"
// date-fns
import getDay from 'date-fns/getDay' ;
import setDay from 'date-fns/setDay' ;
getDay ( new Date ( ) ) ;
// => 0 (Sunday)
setDay ( new Date ( ) , - 14 ) ;
// => "2018-08-26T09:12:49.695Z"
// dayjs
dayjs ( ) . day ( ) ;
// => 0 (Sunday)
dayjs ( ) . set ( 'day' , - 14 ) ;
// => "2018-08-26T09:12:49.695Z"
// Luxon
DateTime . local ( ) . weekday ;
// => 7 (Sunday)
DateTime . local ( )
. minus ( { day : 14 } )
. toJSDate ( ) ;
// => "2018-08-26T09:12:49.695Z"
// Temporal
Temporal . Now . zonedDateTimeISO ( ) . dayOfWeek ;
// => 7 (Sunday)
Temporal . Now . zonedDateTimeISO ( ) . subtract ( Temporal . Duration . from ( { days : 14 } ) ) ;
// => "2018-09-04T09:12:49.695Z"| Bibliothek | Zeit |
|---|---|
| Moment | 1919.404ms |
| Einheimisch | 543.466ms |
| DateFns | 841.436ms |
| Tag | 1229.475ms |
| Luxon | 3936.282ms |
| Zeitlich | - - |
⬆ Zurück nach oben
Bekommt oder setzt den Tag des Jahres.
// Moment.js
moment ( ) . dayOfYear ( ) ;
// => 252
moment ( ) . dayOfYear ( 256 ) ;
// => "2018-09-13T09:12:49.695Z"
// Native
Math . floor (
( new Date ( ) - new Date ( new Date ( ) . getFullYear ( ) , 0 , 0 ) ) / 1000 / 60 / 60 / 24
) ;
// => 252
// date-fns
import getDayOfYear from 'date-fns/getDayOfYear' ;
import setDayOfYear from 'date-fns/setDayOfYear' ;
getDayOfYear ( new Date ( ) ) ;
// => 252
setDayOfYear ( new Date ( ) , 256 ) ;
// => "2018-09-13T09:12:49.695Z"
// dayjs ️ requires dayOfYear plugin
import dayOfYear from 'dayjs/plugin/dayOfYear' ;
dayjs . extend ( dayOfYear ) ;
dayjs ( ) . dayOfYear ( ) ;
// => 252
dayjs ( ) . dayOfYear ( 256 ) ;
// => "2018-09-13T09:12:49.695Z"
// Luxon
DateTime . local ( ) . ordinal ;
// => 252
DateTime . local ( )
. set ( { ordinal : 256 } )
. toString ( ) ;
// => "2018-09-13T09:12:49.695Z"
// Temporal
Temporal . Now . zonedDateTimeISO ( ) . dayOfYear ;
// => 252
Temporal . Now . zonedDateTimeISO ( ) . with ( { month : 1 , day : 1 } ) . add ( Temporal . Duration . from ( { days : 256 } ) ) ;
// => "2018-09-04T09:12:49.695Z"| Bibliothek | Zeit |
|---|---|
| Moment | 5511.172 ms |
| Einheimisch | 530.592 ms |
| DateFns | 2079.043ms |
| Tag | - - |
| Luxon | 3540.810ms |
| Zeitlich | - - |
⬆ Zurück nach oben
Bekommt oder setzt die Woche des Jahres.
// Moment.js
moment ( ) . week ( ) ;
// => 37
moment ( ) . week ( 24 ) ;
// => "2018-06-10T09:12:49.695Z"
// date-fns
import getWeek from 'date-fns/getWeek' ;
import setWeek from 'date-fns/setWeek' ;
getWeek ( new Date ( ) ) ;
// => 37
setWeek ( new Date ( ) , 24 ) ;
// => "2018-06-10T09:12:49.695Z"
// native getWeek
const day = new Date ( ) ;
const MILLISECONDS_IN_WEEK = 604800000 ;
const firstDayOfWeek = 1 ; // monday as the first day (0 = sunday)
const startOfYear = new Date ( day . getFullYear ( ) , 0 , 1 ) ;
startOfYear . setDate (
startOfYear . getDate ( ) + ( firstDayOfWeek - ( startOfYear . getDay ( ) % 7 ) )
) ;
const dayWeek = Math . round ( ( day - startOfYear ) / MILLISECONDS_IN_WEEK ) + 1 ;
// => 37
// native setWeek
const day = new Date ( ) ;
const week = 24 ;
const MILLISECONDS_IN_WEEK = 604800000 ;
const firstDayOfWeek = 1 ; // monday as the first day (0 = sunday)
const startOfYear = new Date ( day . getFullYear ( ) , 0 , 1 ) ;
startOfYear . setDate (
startOfYear . getDate ( ) + ( firstDayOfWeek - ( startOfYear . getDay ( ) % 7 ) )
) ;
const dayWeek = Math . round ( ( day - startOfYear ) / MILLISECONDS_IN_WEEK ) + 1 ;
day . setDate ( day . getDate ( ) - ( dayWeek - week ) * 7 ) ;
day . toISOString ( ) ;
// => "2018-06-10T09:12:49.794Z
// dayjs ️ requires weekOfYear plugin
import weekOfYear from 'dayjs/plugin/weekOfYear' ;
dayjs . extend ( weekOfYear ) ;
dayjs ( ) . week ( ) ;
// => 37
dayjs ( ) . week ( 24 ) ;
// => "2018-06-10T09:12:49.695Z"
// Luxon
DateTime . local ( ) . weekNumber ;
// => 37
DateTime . local ( )
. set ( { weekNumber : 23 } )
. toString ( ) ;
// => "2018-06-10T09:12:49.794Z
// Temporal
Temporal . Now . zonedDateTimeISO ( ) . weekOfYear ;
// => 252
Temporal . Now . zonedDateTimeISO ( ) . with ( { month : 1 , day : 1 } ) . add ( Temporal . Duration . from ( { weeks : 23 } ) ) ;
// => "2018-09-04T09:12:49.695Z"| Bibliothek | Zeit |
|---|---|
| Moment | 7147.201Ms |
| Einheimisch | 1371.631ms |
| DateFns | 5834,815 ms |
| Tag | - - |
| Luxon | 4514.771Ms |
| Zeitlich | - - |
⬆ Zurück nach oben
Holen Sie sich die Anzahl der Tage im aktuellen Monat.
// Moment.js
moment ( '2012-02' , 'YYYY-MM' ) . daysInMonth ( ) ;
// => 29
// Native
new Date ( 2012 , 02 , 0 ) . getDate ( ) ;
// => 29
// date-fns
import getDaysInMonth from 'date-fns/getDaysInMonth' ;
getDaysInMonth ( new Date ( 2012 , 1 ) ) ;
// => 29
// dayjs
dayjs ( '2012-02' ) . daysInMonth ( ) ;
// => 29
// Luxon
DateTime . local ( 2012 , 2 ) . daysInMonth ;
// => 29
// Temporal
( new Temporal . PlainYearMonth ( 2012 , 2 ) ) . daysInMonth
// or
Temporal . PlainYearMonth . from ( '2012-02' ) . daysInMonth
// => 29| Bibliothek | Zeit |
|---|---|
| Moment | 4415.065ms |
| Einheimisch | 186.196ms |
| DateFns | 634.084ms |
| Tag | 1922.774ms |
| Luxon | 1403.032 ms |
| Zeitlich | - - |
⬆ Zurück nach oben
Erholt die Anzahl der Wochen im laufenden Jahr laut ISO Weeks.
// Moment.js
moment ( ) . isoWeeksInYear ( ) ;
// => 52
// Native
const year = new Date ( ) . getFullYear ( ) ;
const MILLISECONDS_IN_WEEK = 604800000 ;
const firstMondayThisYear = new Date ( + year , 0 , 5 - ( new Date ( + year , 0 , 4 ) . getDay ( ) || 7 ) ) ;
const firstMondayNextYear = new Date ( + year + 1 , 0 , 5 - ( new Date ( + year + 1 , 0 , 4 ) . getDay ( ) || 7 ) ) ;
( firstMondayNextYear - firstMondayThisYear ) / MILLISECONDS_IN_WEEK ;
// => 52
// date-fns
import getISOWeeksInYear from 'date-fns/getISOWeeksInYear' ;
getISOWeeksInYear ( new Date ( ) ) ;
// => 52
// dayjs ️ requires isoWeeksInYear plugin
import isoWeeksInYear from 'dayjs/plugin/isoWeeksInYear' ;
dayjs . extend ( isoWeeksInYear ) ;
dayjs ( ) . isoWeeksInYear ( ) ;
// => 52
// Luxon
DateTime . local ( ) . weeksInWeekYear ;
// => 52
// Temporal
Temporal . PlainDate . from ( { day : 31 , month : 12 , year : Temporal . Now . plainDateISO ( ) } ) . weekOfYear
// => 52| Bibliothek | Zeit |
|---|---|
| Moment | 1065,247 ms |
| Einheimisch | - - |
| DateFns | 4954.042ms |
| Tag | - - |
| Luxon | 1134.483ms |
| Zeitlich | - - |
⬆ Zurück nach oben
Gibt die maximale (am weit entfernte Zukunft) des angegebenen Datums zurück.
const array = [
new Date ( 2017 , 4 , 13 ) ,
new Date ( 2018 , 2 , 12 ) ,
new Date ( 2016 , 0 , 10 ) ,
new Date ( 2016 , 0 , 9 ) ,
] ;
// Moment.js
moment . max ( array . map ( a => moment ( a ) ) ) ;
// => "2018-03-11T13:00:00.000Z"
// Native
new Date ( Math . max . apply ( null , array ) ) . toISOString ( ) ;
// => "2018-03-11T13:00:00.000Z"
// date-fns
import max from 'date-fns/max' ;
max ( array ) ;
// => "2018-03-11T13:00:00.000Z"
// dayjs ️ requires minMax plugin
import minMax from 'dayjs/plugin/minMax' ;
dayjs . extend ( minMax ) ;
dayjs . max ( array . map ( a => dayjs ( a ) ) ) ;
// => "2018-03-11T13:00:00.000Z"
// Luxon
DateTime . max ( ... array . map ( a => DateTime . fromJSDate ( a ) ) ) . toJSDate ( ) ;
// => "2018-03-11T13:00:00.000Z"
// Temporal
Temporal . Instant . fromEpochMilliseconds ( Math . max . apply ( null , array ) )
// => "2018-03-11T13:00:00.000Z"| Bibliothek | Zeit |
|---|---|
| Moment | 1780.075ms |
| Einheimisch | 828.332ms |
| DateFns | 980.938ms |
| Tag | - - |
| Luxon | 2694.702 ms |
| Zeitlich | - - |
⬆ Zurück nach oben
Gibt das Minimum (am weitesten entfernte Zukunft) des angegebenen Datums zurück.
const array = [
new Date ( 2017 , 4 , 13 ) ,
new Date ( 2018 , 2 , 12 ) ,
new Date ( 2016 , 0 , 10 ) ,
new Date ( 2016 , 0 , 9 ) ,
] ;
// Moment.js
moment . min ( array . map ( a => moment ( a ) ) ) ;
// => "2016-01-08T13:00:00.000Z"
// Native
new Date ( Math . min . apply ( null , array ) ) . toISOString ( ) ;
// => "2016-01-08T13:00:00.000Z"
// date-fns
import min from 'date-fns/min' ;
min ( array ) ;
// => "2016-01-08T13:00:00.000Z"
// dayjs ️ requires minMax plugin
import minMax from 'dayjs/plugin/minMax' ;
dayjs . extend ( minMax ) ;
dayjs . min ( array . map ( a => dayjs ( a ) ) ) ;
// => "2016-01-08T13:00:00.000Z"
// Luxon
DateTime . min ( ... array . map ( a => DateTime . fromJSDate ( a ) ) ) . toJSDate ( ) ;
// => "2016-01-08T13:00:00.000Z"
// Temporal
Temporal . Instant . fromEpochMilliseconds ( Math . min . apply ( null , array ) )
// => "2018-03-11T13:00:00.000Z"| Bibliothek | Zeit |
|---|---|
| Moment | 1744.459ms |
| Einheimisch | 819.646ms |
| DateFns | 841.249ms |
| Tag | - - |
| Luxon | 2720.462 ms |
| Zeitlich | - - |
⬆ Zurück nach oben
Fügen Sie die angegebene Anzahl von Tagen zum angegebenen Datum hinzu.
// Moment.js
moment ( ) . add ( 7 , 'days' ) ;
// => "2018-09-16T09:12:49.695Z"
// Native
const now = new Date ( ) ;
now . setDate ( now . getDate ( ) + 7 ) ;
// => "Sun Sep 16 2018 09:12:49"
// date-fns
import addDays from 'date-fns/addDays' ;
addDays ( new Date ( ) , 7 ) ;
// => "2018-09-16T09:12:49.695Z"
// dayjs
dayjs ( ) . add ( 7 , 'day' ) ;
// => "2018-09-16T09:12:49.695Z"
// Luxon
DateTime . local ( )
. plus ( { day : 7 } )
. toJSDate ( ) ;
// => "2018-09-16T09:12:49.695Z"
// Temporal
Temporal . Now . zonedDateTimeISO ( ) . add ( Temporal . Duration . from ( { days : 7 } ) ) ;
// => "2018-09-16T09:12:49.695Z"| Bibliothek | Zeit |
|---|---|
| Moment | 1309.485ms |
| Einheimisch | 259.932 ms |
| DateFns | 385.394ms |
| Tag | 1911.881ms |
| Luxon | 3919.797ms |
| Zeitlich | - - |
⬆ Zurück nach oben
Subtrahieren Sie die angegebene Anzahl der Tage nach dem angegebenen Datum.
// Moment.js
moment ( ) . subtract ( 7 , 'days' ) ;
// => "2018-09-02T09:12:49.695Z"
// Native
const now = new Date ( ) ;
now . setDate ( now . getDate ( ) - 7 ) ;
// => Sun Sep 09 2018 09:12:49
// date-fns
import subDays from 'date-fns/subDays' ;
subDays ( new Date ( ) , 7 ) ;
// => "2018-09-02T09:12:49.695Z"
// dayjs
dayjs ( ) . subtract ( 7 , 'day' ) ;
// => "2018-09-02T09:12:49.695Z"
// Luxon
DateTime . local ( )
. minus ( { day : 7 } )
. toJSDate ( ) ;
// => "2018-09-02T09:12:49.695Z"
// Temporal
Temporal . Now . zonedDateTimeISO ( ) . subtract ( Temporal . Duration . from ( { days : 7 } ) ) ;
// => "2018-09-02T09:12:49.695Z"| Bibliothek | Zeit |
|---|---|
| Moment | 1278.384ms |
| Einheimisch | 215.255 ms |
| DateFns | 379.057ms |
| Tag | 1772.593ms |
| Luxon | 4028.866ms |
| Zeitlich | - - |
⬆ Zurück nach oben
Geben Sie den Beginn einer Zeiteinheit für das angegebene Datum zurück.
// Moment.js
moment ( ) . startOf ( 'month' ) ;
// => "2018-08-31T14:00:00.000Z"
// date-fns
import startOfMonth from 'date-fns/startOfMonth' ;
startOfMonth ( new Date ( ) ) ;
// => "2018-08-31T14:00:00.000Z"
// dayjs
dayjs ( ) . startOf ( 'month' ) ;
// => "2018-08-31T14:00:00.000Z"
// Luxon
DateTime . local ( ) . startOf ( 'month' ) ;
// => "2018-09-02T09:12:49.695Z"
// Temporal
Temporal . Now . zonedDateTimeISO ( ) . with ( { day : 1 } ) ;
// => "2018-09-01T14:00:00.000Z"| Bibliothek | Zeit |
|---|---|
| Moment | 1078.948ms |
| Einheimisch | - - |
| DateFns | 398.107ms |
| Tag | 765,358ms |
| Luxon | 2306.765 ms |
| Zeitlich | - - |
⬆ Zurück nach oben
Geben Sie das Ende einer Zeiteinheit für das angegebene Datum zurück.
// Moment.js
moment ( ) . endOf ( 'day' ) ;
// => "2018-09-09T13:59:59.999Z"
// Native
const end = new Date ( ) ;
end . setHours ( 23 , 59 , 59 , 999 ) ;
end . toISOString ( ) ;
// => "2018-09-09T16:59:59.999Z"
// date-fns
import endOfDay from 'date-fns/endOfDay' ;
endOfDay ( new Date ( ) ) ;
// => "2018-09-09T13:59:59.999Z"
// dayjs
dayjs ( ) . endOf ( 'day' ) ;
// => "2018-09-09T13:59:59.999Z"
// Luxon
DateTime . local ( ) . endOf ( 'day' ) ;
// => "2018-09-02T09:12:49.695Z"
// Temporal
Temporal . Now . zonedDateTimeISO ( ) . withPlainTime ( new Temporal . PlainTime ( 23 , 59 , 59 , 999 , 999 , 999 ) ) ;
// => "2018-09-09T16:59:59.999999999Z"| Bibliothek | Zeit |
|---|---|
| Moment | 1241.304ms |
| Einheimisch | 225.519ms |
| DateFns | 319.773 ms |
| Tag | 914.425 ms |
| Luxon | 9920.529ms |
| Zeitlich | - - |
⬆ Zurück nach oben
Geben Sie die formatierte Datumszeichenfolge im angegebenen Format zurück.
// Moment.js
moment ( ) . format ( 'dddd, MMMM Do YYYY, h:mm:ss A' ) ;
// => "Sunday, September 9th 2018, 7:12:49 PM"
moment ( ) . format ( 'ddd, hA' ) ;
// => "Sun, 7PM"
// Native
new Intl . DateTimeFormat ( 'en-US' , { dateStyle : 'full' , timeStyle : 'medium' } ) . format ( new Date ( ) )
// => "Sunday, September 9, 2018 at 7:12:49 PM"
new Intl . DateTimeFormat ( 'en-US' , { weekday : 'short' , hour : 'numeric' } ) . format ( new Date ( ) )
// => "Sun, 7 PM"
// date-fns
import { intlFormat } from 'date-fns'
intlFormat ( new Date ( ) , { dateStyle : 'full' , timeStyle : 'medium' } , { locale : 'en-US' , } )
// => "Sunday, September 9, 2018 at 7:12:49 PM"
intlFormat ( new Date ( ) , { weekday : 'short' , hour : 'numeric' } , { locale : 'en-US' , } )
// => "Sun, 7 PM"
// dayjs
dayjs ( ) . format ( 'dddd, MMMM D YYYY, h:mm:ss A' ) ;
// => "Sunday, September 9 2018, 7:12:49 PM"
dayjs ( ) . format ( 'ddd, hA' ) ;
// => "Sun, 7PM"
// dayjs ️ requires advancedFormat plugin to support more format tokens
import advancedFormat from 'dayjs/plugin/advancedFormat' ;
dayjs . extend ( advancedFormat ) ;
dayjs ( ) . format ( 'dddd, MMMM Do YYYY, h:mm:ss A' ) ;
// => "Sunday, September 9th 2018, 7:12:49 PM"
// Luxon
DateTime . fromMillis ( time ) . toFormat ( 'EEEE, MMMM dd yyyy, h:mm:ss a' ) ;
// => "Sunday, September 9 2018, 7:12:49 PM" ️ not support 9th
DateTime . fromMillis ( time ) . toFormat ( 'EEE, ha' ) ;
// => "Sun, 7PM"
// Temporal
new Intl . DateTimeFormat ( 'en-US' , { dateStyle : 'full' , timeStyle : 'medium' } ) . format ( Temporal . Now . zonedDateTimeISO ( ) )
// => "Sunday, September 9, 2018 at 7:12:49 PM"
new Intl . DateTimeFormat ( 'en-US' , { weekday : 'short' , hour : 'numeric' } ) . format ( Temporal . Now . zonedDateTimeISO ( ) )
// => "Sun, 7 PM"⬆ Zurück nach oben
Rückkehrzeit von jetzt an.
// Moment.js
moment ( 1536484369695 ) . fromNow ( ) ;
// => "4 days ago"
// Native
new Intl . RelativeTimeFormat ( ) . format ( - 4 , 'day' ) ;
// => "4 days ago"
// date-fns
import formatDistance from 'date-fns/formatDistance' ;
formatDistance ( new Date ( 1536484369695 ) , new Date ( ) , { addSuffix : true } ) ;
// => "4 days ago"
// dayjs ️ requires relativeTime plugin
import relativeTime from 'dayjs/plugin/relativeTime' ;
dayjs . extend ( relativeTime ) ;
dayjs ( 1536484369695 ) . fromNow ( ) ;
// => "5 days ago" ️ the rounding method of this plugin is different from moment.js and date-fns, use with care.
// luxon requires Intl.RelativeTimeFormat
DateTime . local ( 2022 , 1 , 27 ) . toRelative ( { base : this } )
// => "in 4 months"
// Temporal
new Intl . RelativeTimeFormat ( ) . format ( - 4 , 'day' ) ;
// => "4 days ago"⬆ Zurück nach oben
Rücklaufzeit von x.
// Moment.js
moment ( [ 2007 , 0 , 27 ] ) . to ( moment ( [ 2007 , 0 , 29 ] ) ) ;
// => "in 2 days"
// date-fns
import formatDistance from 'date-fns/formatDistance' ;
formatDistance ( new Date ( 2007 , 0 , 27 ) , new Date ( 2007 , 0 , 29 ) ) ;
// => "2 days"
// dayjs ️ requires relativeTime plugin
import relativeTime from 'dayjs/plugin/relativeTime' ;
dayjs . extend ( relativeTime ) ;
dayjs ( '2007-01-27' ) . to ( dayjs ( '2007-01-29' ) ) ;
// => "in 2 days"
// luxon does not support relative time
// Temporal
Temporal . PlainDate . from ( '2007-01-27' ) . until ( '2007-01-29' ) ;
// => Temporal.Duration('P2D')⬆ Zurück nach oben
Holen Sie sich die Zeiteinheit zwischen den angegebenen Daten.
// Moment.js
moment ( [ 2007 , 0 , 27 ] ) . diff ( moment ( [ 2007 , 0 , 29 ] ) ) ;
// => -172800000
moment ( [ 2007 , 0 , 27 ] ) . diff ( moment ( [ 2007 , 0 , 29 ] ) , 'days' ) ;
// => -2
// Native
new Date ( 2007 , 0 , 27 ) - new Date ( 2007 , 0 , 29 ) ;
// => -172800000
Math . ceil (
( new Date ( 2007 , 0 , 27 ) - new Date ( 2007 , 0 , 29 ) ) / 1000 / 60 / 60 / 24
) ;
// => -2
// date-fns
import differenceInMilliseconds from 'date-fns/differenceInMilliseconds' ;
differenceInMilliseconds ( new Date ( 2007 , 0 , 27 ) , new Date ( 2007 , 0 , 29 ) ) ;
// => -172800000
import differenceInDays from 'date-fns/differenceInDays' ;
differenceInDays ( new Date ( 2007 , 0 , 27 ) , new Date ( 2007 , 0 , 29 ) ) ;
// => -2
// dayjs
dayjs ( '2007-01-27' ) . diff ( dayjs ( '2007-01-29' ) , 'milliseconds' ) ;
// => -172800000
dayjs ( '2007-01-27' ) . diff ( dayjs ( '2007-01-29' ) , 'days' ) ;
// => -2
// luxon
DateTime . local ( 2007 , 1 , 27 ) . diff ( DateTime . local ( 2007 , 1 , 29 ) ) . milliseconds ;
// => -172800000
DateTime . local ( 2007 , 1 , 27 ) . diff ( DateTime . local ( 2007 , 1 , 29 ) , 'days' ) . days ;
// => -2
// Temporal
Temporal . PlainDate . from ( '2007-01-27' ) . since ( '2007-01-29' ) . total ( { unit : 'millisecond' } ) ;
// => -172800000
Temporal . PlainDate . from ( '2007-01-27' ) . since ( '2007-01-29' ) . total ( { unit : 'day' } ) ;
// => -2⬆ Zurück nach oben
Überprüfen Sie, ob ein Datum vor einem anderen Datum liegt.
// Moment.js
moment ( '2010-10-20' ) . isBefore ( '2010-10-21' ) ;
// => true
// Native
new Date ( 2010 , 10 , 20 ) < new Date ( 2010 , 10 , 21 ) ;
// => true
// date-fns
import isBefore from 'date-fns/isBefore' ;
isBefore ( new Date ( 2010 , 9 , 20 ) , new Date ( 2010 , 9 , 21 ) ) ;
// => true
// dayjs
dayjs ( '2010-10-20' ) . isBefore ( '2010-10-21' ) ;
// => true
// luxon
DateTime . fromISO ( '2010-10-20' ) < DateTime . fromISO ( '2010-10-21' ) ;
// => true
// Temporal
Temporal . PlainDate . compare ( '2010-10-20' , '2010-10-21' ) === - 1 ;
// => true⬆ Zurück nach oben
Überprüfen Sie, ob ein Datum mit einem anderen Datum das gleiche ist.
// Moment.js
moment ( '2010-10-20' ) . isSame ( '2010-10-21' ) ;
// => false
moment ( '2010-10-20' ) . isSame ( '2010-10-20' ) ;
// => true
moment ( '2010-10-20' ) . isSame ( '2010-10-21' , 'month' ) ;
// => true
// Native
new Date ( 2010 , 9 , 20 ) . valueOf ( ) === new Date ( 2010 , 9 , 21 ) . valueOf ( ) ;
// => false
new Date ( 2010 , 9 , 20 ) . valueOf ( ) === new Date ( 2010 , 9 , 20 ) . valueOf ( ) ;
// => true
new Date ( 2010 , 9 , 20 ) . getTime ( ) === new Date ( 2010 , 9 , 20 ) . getTime ( ) ;
// => true
new Date ( 2010 , 9 , 20 ) . valueOf ( ) === new Date ( 2010 , 9 , 20 ) . getTime ( ) ;
// => true
new Date ( 2010 , 9 , 20 ) . toDateString ( ) . substring ( 4 , 7 ) ===
new Date ( 2010 , 9 , 21 ) . toDateString ( ) . substring ( 4 , 7 ) ;
// => true
// date-fns
import isSameDay from 'date-fns/isSameDay' ;
import isSameMonth from 'date-fns/isSameMonth' ;
isSameDay ( new Date ( 2010 , 9 , 20 ) , new Date ( 2010 , 9 , 21 ) ) ;
// => false
isSameDay ( new Date ( 2010 , 9 , 20 ) , new Date ( 2010 , 9 , 20 ) ) ;
// => true
isSameMonth ( new Date ( 2010 , 9 , 20 ) , new Date ( 2010 , 9 , 21 ) ) ;
// => true
// dayjs
dayjs ( '2010-10-20' ) . isSame ( '2010-10-21' ) ;
// => false
dayjs ( '2010-10-20' ) . isSame ( '2010-10-20' ) ;
// => true
dayjs ( '2010-10-20' ) . isSame ( '2010-10-21' , 'month' ) ;
// => true
// luxon
( + DateTime . fromISO ( '2010-10-20' ) ===
+ DateTime . fromISO ( '2010-10-21' ) +
// => false
DateTime . fromISO ( '2010-10-20' ) ) ===
+ DateTime . fromISO ( '2010-10-20' ) ;
// => true
DateTime . fromISO ( '2010-10-20' ) . hasSame ( DateTime . fromISO ( '2010-10-21' ) , 'month' ) ;
// => true
// Temporal
Temporal . PlainDate . from ( '2010-10-20' ) . equals ( '2010-10-21' ) ;
// => false
Temporal . PlainDate . from ( '2010-10-20' ) . equals ( '2010-10-20' ) ;
// => true
Temporal . PlainDate . from ( '2010-10-20' ) . month === Temporal . PlainDate . from ( '2010-10-21' ) . month ;
// => true⬆ Zurück nach oben
Überprüfen Sie, ob ein Datum nach einem anderen Datum ist.
// Moment.js
moment ( '2010-10-20' ) . isAfter ( '2010-10-19' ) ;
// => true
// Native
new Date ( 2010 , 9 , 20 ) > new Date ( 2010 , 9 , 19 ) ;
// => true
// date-fns
import isAfter from 'date-fns/isAfter' ;
isAfter ( new Date ( 2010 , 9 , 20 ) , new Date ( 2010 , 9 , 19 ) ) ;
// => true
// dayjs
dayjs ( '2010-10-20' ) . isAfter ( '2010-10-19' ) ;
// => true
// luxon
DateTime . fromISO ( '2010-10-20' ) > DateTime . fromISO ( '2010-10-19' ) ;
// => true
// Temporal
Temporal . PlainDate . compare ( '2010-10-20' , '2010-10-19' ) === 1 ;
// => true⬆ Zurück nach oben
Überprüfen Sie, ob ein Datum zwischen zwei anderen Daten liegt.
// Moment.js
moment ( '2010-10-20' ) . isBetween ( '2010-10-19' , '2010-10-25' ) ;
// => true
// date-fns
import isWithinInterval from 'date-fns/isWithinInterval' ;
isWithinInterval ( new Date ( 2010 , 9 , 20 ) , {
start : new Date ( 2010 , 9 , 19 ) ,
end : new Date ( 2010 , 9 , 25 ) ,
} ) ;
// => true
// dayjs ️ requires isBetween plugin
import isBetween from 'dayjs/plugin/isBetween' ;
dayjs . extend ( isBetween ) ;
dayjs ( '2010-10-20' ) . isBetween ( '2010-10-19' , '2010-10-25' ) ;
// => true
// luxon
Interval . fromDateTimes (
DateTime . fromISO ( '2010-10-19' ) ,
DateTime . fromISO ( '2010-10-25' )
) . contains ( DateTime . fromISO ( '2010-10-20' ) ) ;
// => true⬆ Zurück nach oben
Überprüfen Sie, ob ein Jahr ein Schaltjahr ist.
// Moment.js
moment ( [ 2000 ] ) . isLeapYear ( ) ;
// => true
// Native
new Date ( 2000 , 1 , 29 ) . getDate ( ) === 29 ;
// => true
// date-fns
import isLeapYear from 'date-fns/isLeapYear' ;
isLeapYear ( new Date ( 2000 , 0 , 1 ) ) ;
// => true
// dayjs ️ requires isLeapYear plugin
import isLeapYear from 'dayjs/plugin/isLeapYear' ;
dayjs . extend ( isLeapYear ) ;
dayjs ( '2000-01-01' ) . isLeapYear ( ) ;
// => true
// luxon
expect ( DateTime . local ( 2000 ) . isInLeapYear ) . toBeTruthy ( ) ;
// => true
// Temporal
Temporal . PlainDate . from ( '2000-01-01' ) . inLeapYear ;
// => true⬆ Zurück nach oben
Überprüfen Sie, ob eine Variable ein natives JS -Datum Objekt ist.
// Moment.js
moment . isDate ( new Date ( ) ) ;
// => true
// Native
new Date ( ) instanceof Date ;
// => true
// date-fns
import isDate from 'date-fns/isDate' ;
isDate ( new Date ( ) ) ;
// => true
// dayjs
dayjs ( new Date ( ) ) . isValid ( ) ;
// luxon
DateTime . local ( ) . isValid ;
// => true
// Temporal
new Date ( ) instanceof Date ;
Temporal . Now . plainTimeISO ( ) instanceof Temporal . PlainTime ;
Temporal . Now . plainDateISO ( ) instanceof Temporal . PlainDate ;
Temporal . Now . plainDateTimeISO ( ) instanceof Temporal . PlainDateTime ;
Temporal . Now . zonedDateTimeISO ( ) instanceof Temporal . ZonedDateTime ;
// => true⬆ Zurück nach oben
MIT