-
-
Notifications
You must be signed in to change notification settings - Fork 2.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fix: Add NegativeYear Plugin support (#2640)
- Loading branch information
1 parent
3737c8c
commit 6a42e0d
Showing
3 changed files
with
79 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
export default (_, c, dayjs) => { | ||
const proto = c.prototype | ||
|
||
const parseDate = (cfg) => { | ||
const { date } = cfg | ||
if (typeof date === 'string' && date.charAt(0) === '-') { | ||
const newDate = new Date(date.slice(1)) | ||
const fullYear = newDate.getFullYear() | ||
if (date.indexOf(`-${fullYear}`) !== -1) { | ||
return dayjs(newDate).subtract(fullYear * 2, 'year').toDate() | ||
} | ||
return date | ||
} | ||
return date | ||
} | ||
|
||
const oldParse = proto.parse | ||
proto.parse = function (cfg) { | ||
cfg.date = parseDate.bind(this)(cfg) | ||
oldParse.bind(this)(cfg) | ||
} | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
import MockDate from 'mockdate' | ||
import dayjs from 'dayjs' | ||
import negativeYear from '../../src/plugin/negativeYear' | ||
import utc from '../../src/plugin/utc' | ||
import { REGEX_PARSE } from '../../src/constant' | ||
|
||
|
||
dayjs.extend(negativeYear) | ||
dayjs.extend(utc) | ||
|
||
beforeEach(() => { | ||
MockDate.set(new Date()) | ||
}) | ||
|
||
afterEach(() => { | ||
MockDate.reset() | ||
}) | ||
|
||
describe('negativeYear', () => { | ||
it('parses negative years', () => { | ||
expect(dayjs('-2020-01-01').year()).toBe(-2020) | ||
const date = '-2021/01/03' | ||
const date2 = '01/03/-2021' | ||
const date3 = '01-03--2021' | ||
const d = date.match(REGEX_PARSE) | ||
expect(dayjs(date).format('YYYY-MM-DD')).toBe('-2021-01-03') | ||
expect(dayjs(date2).format('YYYY-MM-DD')).toBe('Invalid Date') | ||
expect(dayjs(date3).format()).toBe('Invalid Date') | ||
expect(d).toBe(null) | ||
}) | ||
|
||
it('does not parse non-negative years', () => { | ||
expect(dayjs('2020-01-01').year()).toBe(2020) | ||
}) | ||
|
||
it('works with other plugins', () => { | ||
expect(dayjs.utc('-2020-01-01').year()).toBe(-2020) | ||
}) | ||
|
||
it('Add and subtract with negative years', () => { | ||
expect(dayjs('-2006').add(1, 'y')).toEqual(dayjs('-2005')) | ||
expect(dayjs('-2006').subtract(1, 'y')).toEqual(dayjs('-2007')) | ||
expect(dayjs('-2006').add(1, 'y').format('YYYY')).toBe(dayjs('-2005').format('YYYY')) | ||
expect(dayjs('-2006').subtract(1, 'y').format('YYYY')).toBe(dayjs('-2007').format('YYYY')) | ||
}) | ||
|
||
it('Compare date with negative years', () => { | ||
expect(dayjs('-2006').isAfter(dayjs('-2007'))).toBeTruthy() | ||
expect(dayjs('-2006').isBefore(dayjs('-2005'))).toBeTruthy() | ||
expect(dayjs('-2006').isSame('-2006')).toBeTruthy() | ||
}) | ||
}) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
import {PluginFunc} from 'dayjs' | ||
|
||
declare const plugin: PluginFunc | ||
export = plugin |