diff options
| author | Leyla Jähnig <[email protected]> | 2022-03-25 09:02:10 +0100 |
|---|---|---|
| committer | GitHub <[email protected]> | 2022-03-25 09:02:10 +0100 |
| commit | c1c60649ee554f81887ab618ae8b2e2bd5a27d55 (patch) | |
| tree | 5f70fa6cfe1c1a27b8f19921db4e3b6e0d5a8819 /src | |
| parent | 7635dc9a63b24b681f88d4029573d0caf8e652b5 (diff) | |
| download | faker-c1c60649ee554f81887ab618ae8b2e2bd5a27d55.tar.xz faker-c1c60649ee554f81887ab618ae8b2e2bd5a27d55.zip | |
refactor: date accept number input (#670)
Diffstat (limited to 'src')
| -rw-r--r-- | src/date.ts | 47 |
1 files changed, 20 insertions, 27 deletions
diff --git a/src/date.ts b/src/date.ts index 6c9b9100..4a8e7827 100644 --- a/src/date.ts +++ b/src/date.ts @@ -2,29 +2,18 @@ import type { Faker } from '.'; import type { DateEntryDefinition } from './definitions'; /** - * Converts date passed as a string or Date to a Date object. If nothing passed, takes current date. + * Converts date passed as a string, number or Date to a Date object. + * If nothing or a non parseable value is passed, takes current date. * * @param date Date */ -function toDate(date?: string | Date): Date { - if (date != null) { - return new Date(date instanceof Date ? date : Date.parse(date)); +function toDate(date?: string | Date | number): Date { + date = new Date(date); + if (isNaN(date.valueOf())) { + date = new Date(); } - return new Date(); -} - -/** - * Converts date passed as a string or Date to milliseconds. If nothing passed, takes current date. - * - * @param date Date - */ -function toMilliseconds(date?: string | Date): number { - if (date != null) { - return date instanceof Date ? date.getTime() : Date.parse(date); - } - - return new Date().getTime(); + return date; } /** @@ -54,7 +43,7 @@ export class _Date { * faker.date.past(10) // '2017-10-25T21:34:19.488Z' * faker.date.past(10, '2020-01-01T00:00:00.000Z') // '2017-08-18T02:59:12.350Z' */ - past(years?: number, refDate?: string | Date): Date { + past(years?: number, refDate?: string | Date | number): Date { const date = toDate(refDate); const range = { min: 1000, @@ -81,7 +70,7 @@ export class _Date { * faker.date.future(10) // '2030-11-23T09:38:28.710Z' * faker.date.future(10, '2020-01-01T00:00:00.000Z') // '2020-12-13T22:45:10.252Z' */ - future(years?: number, refDate?: string | Date): Date { + future(years?: number, refDate?: string | Date | number): Date { const date = toDate(refDate); const range = { min: 1000, @@ -104,9 +93,9 @@ export class _Date { * @example * faker.date.between('2020-01-01T00:00:00.000Z', '2030-01-01T00:00:00.000Z') // '2026-05-16T02:22:53.002Z' */ - between(from: string | Date, to: string | Date): Date { - const fromMs = toMilliseconds(from); - const toMs = toMilliseconds(to); + between(from: string | Date | number, to: string | Date | number): Date { + const fromMs = toDate(from).getTime(); + const toMs = toDate(to).getTime(); const dateOffset = this.faker.datatype.number(toMs - fromMs); return new Date(fromMs + dateOffset); @@ -129,14 +118,18 @@ export class _Date { * faker.date.betweens('2020-01-01T00:00:00.000Z', '2030-01-01T00:00:00.000Z', 2) * // [ 2023-05-02T16:00:00.000Z, 2026-09-01T08:00:00.000Z ] */ - betweens(from: string | Date, to: string | Date, num?: number): Date[] { + betweens( + from: string | Date | number, + to: string | Date | number, + num?: number + ): Date[] { if (typeof num === 'undefined') { num = 3; } const dates: Date[] = []; - for (let i = 0; i < num; i++) { + while (dates.length < num) { dates.push(this.between(from, to)); } @@ -156,7 +149,7 @@ export class _Date { * faker.date.recent(10) // '2022-01-29T06:12:12.829Z' * faker.date.recent(10, '2020-01-01T00:00:00.000Z') // '2019-12-27T18:11:19.117Z' */ - recent(days?: number, refDate?: string | Date): Date { + recent(days?: number, refDate?: string | Date | number): Date { const date = toDate(refDate); const range = { min: 1000, @@ -183,7 +176,7 @@ export class _Date { * faker.date.soon(10) // '2022-02-11T05:14:39.138Z' * faker.date.soon(10, '2020-01-01T00:00:00.000Z') // '2020-01-01T02:40:44.990Z' */ - soon(days?: number, refDate?: string | Date): Date { + soon(days?: number, refDate?: string | Date | number): Date { const date = toDate(refDate); const range = { min: 1000, |
