datecollator
Version:
Date collation by specified date parts for granular comparison.
73 lines (56 loc) • 2.84 kB
Markdown
# DateCollator
Date collation by specified date parts for granular comparison.
## Description
`DateCollator` is like `Intl.Collator`, except it allows for the comparison of `Date`s by (most of) the date part types specified by [`Intl.DateTimeFormat.prototype.formatToParts()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat/formatToParts). The configuration options are similar to some of `Intl.Collator`'s options:
`dateSensitivity`: The granularity and order of date parts to use with each comparison, default `["year", "month", "day", "hour", "minute", "second", "fractionalSecond"]`. Possible values are an array of:
* `"era"`
* `"year"`
* `"month"`
* `"weekday"`
* `"day"`
* `"dayPeriod"`
* `"hour"`
* `"minute"`
* `"second"`
* `"fractionalSecond"`
`dateUsage`: Whether the comparison is to be performed using local or UTC values, default `"local"`. Possible values are:
* `"local"` Use `Date.prototype` functions like `getMinutes()`.
* `"utc"` Use `Date.prototype` functions like `getUTCMinutes()`.
## Importing
import DateCollator from 'datecollator';
—OR—
import {DateCollator} from 'datecollator';
## Examples
Check whether Dates occur during the same day.
const dateCollatorDownToDay = new DateCollator( null, {dateSensitivity:['year', 'month', 'day']});
dateCollatorDownToDay.compare( new Date( 2020, 2, 23, 9, 0 ), new Date( 2020, 2, 23, 17, 0 ));
// returns 0
Check whether Dates occur during the time (hour and minute) of any day.
const dateCollatorJustByTime = new DateCollator( null, {dateSensitivity:['hour', 'minute'], dateUsage:'utc'});
dateCollatorJustByTime.compare( new Date( 2020, 2, 23, 11, 0 ), new Date( 2026, 2, 23, 11, 0 ));
// returns 0
Check whether Dates occur during the same "dayPeriod" (meridian) of any day.
const dateCollatorDownToDayPeriod = new DateCollator( null, {dateSensitivity:['dayPeriod']});
dateCollatorDownToDayPeriod.compare( new Date( 2020, 2, 23, 9, 0 ), new Date( 2026, 2, 23, 11, 0 ));
// returns 0
Check whether Dates occur during the same "weekday" of any week.
const dateCollatorJustByWeekday = new DateCollator( null, {dateSensitivity:['weekday'], dateUsage:'utc'});
dateCollatorJustByWeekday.compare( new Date( 2020, 2, 23, 9, 0 ), new Date( 2026, 2, 23, 11, 0 ));
// returns 0
Default collator for sorting.
const dateCollator = new DateCollator();
let dates =
[
new Date( 2020, 2, 23, 17, 0 ),
new Date( 2020, 2, 23, 11, 0 ),
new Date( 2020, 2, 23, 9, 0 ),
new Date( 2026, 2, 23, 11, 0 )
];
dates.sort( dateCollator.compare ).map(( date ) => date.toISOString());
// returns
// [
// "2020-03-23T14:00:00.000Z",
// "2020-03-23T16:00:00.000Z",
// "2020-03-23T22:00:00.000Z",
// "2026-03-23T16:00:00.000Z"
// ]