diff --git a/README.md b/README.md index 77a7ed1..469dba9 100644 --- a/README.md +++ b/README.md @@ -8,9 +8,17 @@ Problems with Moment.js: - Moment.js is mutable due to OOP APIs and non-pure functions, which causes bugs: https://github.com/moment/moment/blob/develop/src/test/moment/add_subtract.js#L244-L286 -Only using some simple functions from moment.js might be considered overkill, [date-fns](https://github.com/date-fns/date-fns) can be a good replacement in such situations. See https://github.com/moment/moment/issues/2373 for more ideas on why and how people switch from moment.js to date-fns. +Only using some simple functions from moment.js might be considered overkill, [date-fns](https://github.com/date-fns/date-fns) and [dayjs](https://github.com/iamkun/dayjs) can be good replacements in such situations. See https://github.com/moment/moment/issues/2373 for more ideas on why and how people switch from moment.js to other date libs. -Screenshot +## Comparison + +Let's take a look at date lib comparison in the following table: + +| Name | Size(gzip) | Tree-shaking | Popularity | Methods richness | Pattern | Timezone Support | Locale | +| --------- | ------------ | ------------ | ---------- | ---------------- | ---------- | --------------------- | ------ | +| Moment.js | 329K(69.6K) | No | 38k | High | OOP | Good(moment-timezone) | 123 | +| date-fns | 78.4k(13.4k) | Yes | 13k | High | Functional | not yet | 32 | +| dayjs | 6.5k | No | 14k | Medium | OOP | not yet | 23 | ## Voice of Developers @@ -131,6 +139,10 @@ moment("12-25-1995", "MM-DD-YYYY"); 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" ``` **[⬆ back to top](#quick-links)** @@ -148,6 +160,8 @@ moment("2010-10-20 4:30", "YYYY-MM-DD HH:mm"); 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 ❌ does not support custom format parse ``` **[⬆ back to top](#quick-links)** @@ -166,6 +180,8 @@ 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 ❌ does not support custom format parse ``` **[⬆ back to top](#quick-links)** @@ -188,6 +204,20 @@ 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 ``` Set the `Millisecond/Second/Minute/Hour` of the given date. @@ -204,6 +234,20 @@ 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" ``` **[⬆ back to top](#quick-links)** @@ -224,6 +268,20 @@ 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" ``` **[⬆ back to top](#quick-links)** @@ -235,15 +293,29 @@ Gets or sets the day of the week. ```js // Moment.js moment().day(); -// => 0 +// => 0 (Sunday) moment().day(-14); // => "2018-08-26T09:12:49.695Z" // Native new Date().getDay(); -// => 0 +// => 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" ``` **[⬆ back to top](#quick-links)** @@ -261,11 +333,13 @@ moment().dayOfYear(256); // date-fns import getDayOfYear from "date-fns/getDayOfYear"; +import setDayOfYear from "date-fns/setDayOfYear"; getDayOfYear(new Date()); // => 252 -import setDayOfYear from "date-fns/setDayOfYear"; setDayOfYear(new Date(), 256); // => "2018-09-13T09:12:49.695Z" + +// dayjs ❌ does not support day of year ``` **[⬆ back to top](#quick-links)** @@ -283,11 +357,18 @@ moment().week(24); // date-fns import getWeek from "date-fns/getWeek"; +import setWeek from "date-fns/setWeek"; getWeek(new Date()); // => 37 -import setWeek from "date-fns/setWeek"; setWeek(new Date(), 24); // => "2018-06-10T09:12:49.695Z" + +// dayjs ⚠️ requires weekOfYear plugin +import weekOfYear from "dayjs/plugin/weekOfYear"; +dayjs.extend(weekOfYear); +dayjs().week(); +// => 37 +// dayjs ❌ does not support set week of year ``` **[⬆ back to top](#quick-links)** @@ -305,6 +386,10 @@ moment("2012-02", "YYYY-MM").daysInMonth(); import getDaysInMonth from "date-fns/getDaysInMonth"; getDaysInMonth(new Date(2012, 1)); // => 29 + +// dayjs +dayjs("2012-02").daysInMonth(); +// => 29 ``` **[⬆ back to top](#quick-links)** @@ -322,6 +407,8 @@ moment().isoWeeksInYear(); import getISOWeeksInYear from "date-fns/getISOWeeksInYear"; getISOWeeksInYear(new Date()); // => 52 + +// dayjs ❌ does not support weeks in the year ``` **[⬆ back to top](#quick-links)** @@ -345,6 +432,8 @@ moment.max(array.map(a => moment(a))); import max from "date-fns/max"; max(array); // => "2018-03-11T13:00:00.000Z" + +// dayjs ❌ does not support the maximum of the given dates ``` **[⬆ back to top](#quick-links)** @@ -368,6 +457,8 @@ moment.min(array.map(a => moment(a))); import min from "date-fns/min"; min(array); // => "2016-01-08T13:00:00.000Z" + +// dayjs ❌ does not support the minimum of the given dates ``` **[⬆ back to top](#quick-links)** @@ -387,6 +478,10 @@ moment().add(7, "days"); 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" ``` **[⬆ back to top](#quick-links)** @@ -404,6 +499,10 @@ moment().subtract(7, "days"); 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" ``` **[⬆ back to top](#quick-links)** @@ -421,6 +520,10 @@ moment().startOf("month"); 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" ``` **[⬆ back to top](#quick-links)** @@ -438,6 +541,10 @@ moment().endOf("day"); 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" ``` **[⬆ back to top](#quick-links)** @@ -461,6 +568,12 @@ format(new Date(), "eeee, MMMM do YYYY, h:mm:ss aa"); // => "Sunday, September 9th 2018, 7:12:49 PM" format(new Date(), "eee, ha"); // => "Sun, 7PM" + +// dayjs +dayjs().format("dddd, MMMM D YYYY, h:mm:ss A"); +// => "Sunday, September 9 2018, 7:12:49 PM" ⚠️ not support 9th +dayjs().format("ddd, hA"); +// => "Sun, 7PM" ``` **[⬆ back to top](#quick-links)** @@ -471,13 +584,20 @@ Return time from now. ```js // Moment.js -moment([2018, 8, 9]).fromNow(); -// => "about 4 hours ago" +moment(1536484369695).fromNow(); +// => "4 days ago" // date-fns import formatDistance from "date-fns/formatDistance"; -formatDistance(new Date(2018, 8, 9), new Date(), { addSuffix: true }); -// => "4 hours ago" +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. ``` **[⬆ back to top](#quick-links)** @@ -495,6 +615,12 @@ moment([2007, 0, 27]).to(moment([2007, 0, 29])); 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" ``` **[⬆ back to top](#quick-links)** @@ -517,6 +643,12 @@ differenceInMilliseconds(new Date(2007, 0, 27), new Date(2007, 0, 29)); 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 ``` **[⬆ back to top](#quick-links)** @@ -536,6 +668,10 @@ moment("2010-10-20").isBefore("2010-10-21"); 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 ``` **[⬆ back to top](#quick-links)** @@ -550,13 +686,25 @@ 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 // 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 ❌ does not support is same month ``` **[⬆ back to top](#quick-links)** @@ -574,6 +722,10 @@ moment("2010-10-20").isAfter("2010-10-19"); 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 ``` **[⬆ back to top](#quick-links)** @@ -594,6 +746,12 @@ isWithinInterval(new Date(2010, 9, 20), { 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 ``` **[⬆ back to top](#quick-links)** @@ -611,6 +769,12 @@ moment([2000]).isLeapYear(); 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").isLeapYear(); +// => true ``` **[⬆ back to top](#quick-links)** @@ -628,6 +792,8 @@ moment.isDate(new Date()); import isDate from "date-fns/isDate"; isDate(new Date()); // => true + +// dayjs ❌ does not support is date ``` **[⬆ back to top](#quick-links)** diff --git a/__tests__/index.js b/__tests__/index.js index 02d8da9..f17cd5b 100644 --- a/__tests__/index.js +++ b/__tests__/index.js @@ -1,6 +1,15 @@ const moment = require('moment'); const date = require('date-fns'); const fr = require('date-fns/locale/fr'); +const dayjs = require('dayjs'); +const relativeTime = require('dayjs/plugin/relativeTime'); // load on demand +const weekOfYear = require('dayjs/plugin/weekOfYear'); // load on demand +const isBetween = require('dayjs/plugin/isBetween'); // load on demand +const isLeapYear = require('dayjs/plugin/isLeapYear'); // load on demand +dayjs.extend(relativeTime); +dayjs.extend(weekOfYear); +dayjs.extend(isBetween); +dayjs.extend(isLeapYear); const time = 1536484369695; @@ -8,7 +17,9 @@ describe('Parse', () => { it('String + Date Format', () => { const m = moment('12-25-1995', 'MM-DD-YYYY'); const d = date.parse('12-25-1995', 'MM-dd-yyyy', new Date()); + const day = dayjs('12-25-1995'); expect(m.valueOf()).toBe(d.getTime()); + expect(m.valueOf()).toBe(day.valueOf()); }); it('String + Time Format', () => { const m = moment('2010-10-20 4:30', 'YYYY-MM-DD HH:mm'); @@ -25,56 +36,96 @@ describe('Parse', () => { describe('Get + Set', () => { it('get Second', () => { const m = moment(time).seconds(); - const d = new Date(time).getSeconds(); + const n = new Date(time).getSeconds(); + const d = date.getSeconds(new Date(time)); + const day = dayjs(time).second(); + expect(m).toBe(n); expect(m).toBe(d); + expect(m).toBe(day); }); it('set Second', () => { const m = moment(time) .seconds(30) .valueOf(); - const d = new Date(time).setSeconds(30); + const n = new Date(time).setSeconds(30); + const d = date.setSeconds(new Date(time), 30).getTime(); + const day = dayjs(time) + .set('second', 30) + .valueOf(); + expect(m).toBe(n); expect(m).toBe(d); + expect(m).toBe(day); }); it('get Hour', () => { const m = moment(time).hours(); - const d = new Date(time).getHours(); + const n = new Date(time).getHours(); + const d = date.getHours(new Date(time)); + const day = dayjs(time).hour(); + expect(m).toBe(n); expect(m).toBe(d); + expect(m).toBe(day); }); it('set Hour', () => { const m = moment(time) .hour(13) .valueOf(); - const d = new Date(time).setHours(13); + const n = new Date(time).setHours(13); + const d = date.setHours(new Date(time), 13).getTime(); + const day = dayjs(time) + .set('hour', 13) + .valueOf(); + expect(m).toBe(n); expect(m).toBe(d); + expect(m).toBe(day); }); it('get Date of Month', () => { const m = moment(time).date(); - const d = new Date(time).getDate(); + const n = new Date(time).getDate(); + const d = date.getDate(new Date(time)); + const day = dayjs(time).date(); + expect(m).toBe(n); expect(m).toBe(d); + expect(m).toBe(day); }); it('set Date of Month', () => { const m = moment(time) .date(4) .valueOf(); - const d = new Date(time).setDate(4); + const n = new Date(time).setDate(4); + const d = date.setDate(new Date(time), 4).getTime(); + const day = dayjs(time) + .set('date', 4) + .valueOf(); + expect(m).toBe(n); expect(m).toBe(d); + expect(m).toBe(day); }); it('get Day of Week', () => { const m = moment(time).day(); - const d = new Date(time).getDay(); + const n = new Date(time).getDay(); + const d = date.getDay(new Date(time)); + const day = dayjs(time).day(); + expect(m).toBe(n); expect(m).toBe(d); + expect(m).toBe(day); }); it('set Day of Week', () => { const m = moment(time) .day(-14) .valueOf(); - const d = new Date(time).setDate(new Date(time).getDate() - 14); + const n = new Date(time).setDate(new Date(time).getDate() - 14); + const d = date.setDay(new Date(time), -14).getTime(); + const day = dayjs(time) + .set('day', -14) + .valueOf(); + expect(m).toBe(n); expect(m).toBe(d); + expect(m).toBe(day); }); it('get Day of Year', () => { @@ -94,7 +145,9 @@ describe('Get + Set', () => { it('get Week of Year', () => { const m = moment(time).week(); const d = date.getWeek(new Date(time)); + const day = dayjs(time).week(); // plugin expect(m).toBe(d); + expect(m).toBe(day); }); it('set Week of Year', () => { @@ -108,7 +161,9 @@ describe('Get + Set', () => { it('Days in Month', () => { const m = moment('2012-02', 'YYYY-MM').daysInMonth(); const d = date.getDaysInMonth(new Date(2012, 1)); + const day = dayjs('2012-02').daysInMonth(); expect(m).toBe(d); + expect(m).toBe(day); }); it('get Weeks In Year', () => { @@ -148,25 +203,33 @@ describe('Manipulate', () => { it('Add', () => { const m = moment(time).add(7, 'days'); const d = date.addDays(new Date(time), 7); + const day = dayjs(time).add(7, 'day'); expect(m.valueOf()).toBe(d.getTime()); + expect(m.valueOf()).toBe(day.valueOf()); }); it('Subtract', () => { const m = moment(time).subtract(7, 'days'); const d = date.subDays(new Date(time), 7); + const day = dayjs(time).subtract(7, 'day'); expect(m.valueOf()).toBe(d.getTime()); + expect(m.valueOf()).toBe(day.valueOf()); }); it('Start of Time', () => { const m = moment(time).startOf('month'); const d = date.startOfMonth(new Date(time)); + const day = dayjs(time).startOf('month'); expect(m.valueOf()).toBe(d.getTime()); + expect(m.valueOf()).toBe(day.valueOf()); }); it('End of Time', () => { const m = moment(time).endOf('day'); const d = date.endOfDay(new Date(time)); + const day = dayjs(time).endOf('day'); expect(m.valueOf()).toBe(d.getTime()); + expect(m.valueOf()).toBe(day.valueOf()); }); }); @@ -174,11 +237,15 @@ describe('Display', () => { it('Format', () => { const m = moment(time).format('dddd, MMMM Do YYYY, h:mm:ss A'); const d = date.format(new Date(time), 'eeee, MMMM do YYYY, h:mm:ss aa'); + const day = dayjs(time).format('dddd, MMMM D YYYY, h:mm:ss A'); expect(m).toBe(d); + expect(moment(time).format('dddd, MMMM D YYYY, h:mm:ss A')).toBe(day); const m2 = moment(time).format('ddd, hA'); const d2 = date.format(new Date(time), 'eee, ha'); + const day2 = dayjs(time).format('ddd, hA'); expect(m2).toBe(d2); + expect(m2).toBe(day2); }); it('Time from now', () => { @@ -186,13 +253,17 @@ describe('Display', () => { const d = date.formatDistance(new Date(time), new Date(), { addSuffix: true, }); - expect(d).toContain(m); + const day = dayjs(time).fromNow(); // plugin + expect(m).toBe(d); + expect(moment().fromNow()).toBe(dayjs().fromNow()); }); it('Time from X', () => { const m = moment([2007, 0, 27]).to(moment([2007, 0, 29])); const d = date.formatDistance(new Date(2007, 0, 27), new Date(2007, 0, 29)); + const day = dayjs('2007-01-27').to(dayjs('2007-01-29')); expect(m).toContain(d); + expect(m).toBe(day); }); it('Difference', () => { @@ -201,14 +272,18 @@ describe('Display', () => { new Date(2007, 0, 27), new Date(2007, 0, 29) ); + const day = dayjs('2007-01-27').diff(dayjs('2007-01-29'), 'milliseconds'); expect(m).toBe(d); + expect(m).toBe(day); const m2 = moment([2007, 0, 27]).diff(moment([2007, 0, 29]), 'days'); const d2 = date.differenceInDays( new Date(2007, 0, 27), new Date(2007, 0, 29) ); + const day2 = dayjs('2007-01-27').diff(dayjs('2007-01-29'), 'days'); expect(m2).toBe(d2); + expect(m2).toBe(day2); }); }); @@ -216,8 +291,10 @@ describe('Query', () => { it('Is Before', () => { const m = moment('2010-10-20').isBefore('2010-10-21'); const d = date.isBefore(new Date(2010, 9, 20), new Date(2010, 9, 21)); + const day = dayjs('2010-10-20').isBefore('2010-10-21'); //plugin expect(m).toBeTruthy(); expect(d).toBeTruthy(); + expect(day).toBeTruthy(); }); it('Is Same', () => { @@ -225,6 +302,7 @@ describe('Query', () => { expect( date.isSameDay(new Date(2010, 9, 20), new Date(2010, 9, 21)) ).toBeFalsy(); + expect(dayjs('2010-10-20').isSame('2010-10-21')).toBeFalsy(); expect(moment('2010-10-20').isSame('2010-10-21', 'month')).toBeTruthy(); expect( @@ -235,8 +313,10 @@ describe('Query', () => { it('Is After', () => { const m = moment('2010-10-20').isAfter('2010-10-19'); const d = date.isAfter(new Date(2010, 9, 20), new Date(2010, 9, 19)); + const day = dayjs('2010-10-20').isAfter('2010-10-19'); expect(m).toBeTruthy(); expect(d).toBeTruthy(); + expect(day).toBeTruthy(); }); it('Is Between', () => { @@ -245,18 +325,23 @@ describe('Query', () => { start: new Date(2010, 9, 19), end: new Date(2010, 9, 25), }); + const day = dayjs('2010-10-20').isBetween('2010-10-19', '2010-10-25'); //plugin + expect(m).toBeTruthy(); expect(d).toBeTruthy(); + expect(day).toBeTruthy(); }); it('Is Leap Year', () => { expect(moment([2000]).isLeapYear()).toBeTruthy(); expect(date.isLeapYear(new Date(2000, 0, 1))).toBeTruthy(); expect(date.isLeapYear(new Date(2001, 0, 1))).toBeFalsy(); + expect(dayjs('2000').isLeapYear()).toBeTruthy(); }); it('Is a Date', () => { expect(moment.isDate(new Date())).toBeTruthy(); expect(date.isDate(new Date())).toBeTruthy(); + expect(dayjs.isDayjs(dayjs())).toBeTruthy(); }); }); diff --git a/lib/__tests__/index.js b/lib/__tests__/index.js index 2abfc43..1252391 100644 --- a/lib/__tests__/index.js +++ b/lib/__tests__/index.js @@ -135,7 +135,8 @@ describe('ESLint plugin', () => { code: "const m = moment('2010-10-20').isAfter('2010-10-19')", errors: [ { - message: 'Consider using date-fns isAfter(date, dateToCompare)', + message: + 'Consider using date-fns isAfter(date, dateToCompare) or dayjs().isAfter()', type: 'CallExpression', }, ], diff --git a/lib/rules/methods.json b/lib/rules/methods.json index 1d8ed38..7fe26d0 100644 --- a/lib/rules/methods.json +++ b/lib/rules/methods.json @@ -27,19 +27,19 @@ "alternative": "date-fns min(date)" }, "add": { - "alternative": "date-fns addDays(date, amount)" + "alternative": "date-fns addDays(date, amount) or dayjs().add(number, unit)" }, "subtract": { - "alternative": "date-fns subDays(date, amount)" + "alternative": "date-fns subDays(date, amount) or dayjs().subtract(number, unit)" }, "startOf": { - "alternative": "date-fns startOfMonth(date)" + "alternative": "date-fns startOfMonth(date) or dayjs().startOf(unit)" }, "endOf": { - "alternative": "date-fns endOfDay(date)" + "alternative": "date-fns endOfDay(date) or dayjs().endOf(unit)" }, "format": { - "alternative": "date-fns format(date, format)" + "alternative": "date-fns format(date, format) or dayjs().format()" }, "fromNow": { "alternative": "date-fns formatDistance(date, baseDate)" @@ -48,19 +48,19 @@ "alternative": "date-fns formatDistance(date, baseDate)" }, "diff": { - "alternative": "date-fns differenceInMilliseconds(dateLeft, dateRight)" + "alternative": "date-fns differenceInMilliseconds(dateLeft, dateRight) or dayjs().diff()" }, "daysInMonth": { - "alternative": "date-fns getDaysInMonth(date)" + "alternative": "date-fns getDaysInMonth(date) or dayjs().daysInMonth();" }, "isBefore": { - "alternative": "date-fns isBefore(date, dateToCompare)" + "alternative": "date-fns isBefore(date, dateToCompare) or dayjs().isBefore()" }, "isSame": { - "alternative": "date-fns isSameMonth(dateLeft, dateRight)" + "alternative": "date-fns isSameMonth(dateLeft, dateRight) or dayjs().isSame()" }, "isAfter": { - "alternative": "date-fns isAfter(date, dateToCompare)" + "alternative": "date-fns isAfter(date, dateToCompare) or dayjs().isAfter()" }, "isBetween": { "alternative": "date-fns isWithinInterval(date, interval)" diff --git a/package.json b/package.json index 722b044..ce5d446 100644 --- a/package.json +++ b/package.json @@ -31,6 +31,7 @@ "babel-eslint": "^9.0.0", "coveralls": "^3.0.2", "date-fns": "^2.0.0-alpha.16", + "dayjs": "^1.7.5", "eslint": "^5.5.0", "husky": "^0.14.3", "jest": "^23.5.0", diff --git a/screenshot.png b/screenshot.png deleted file mode 100644 index 1c4e828..0000000 Binary files a/screenshot.png and /dev/null differ