From 5f118e81d345411d23d49a75fd9080306e0c48c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=96=87=E7=92=90?= Date: Fri, 14 Sep 2018 16:36:51 +0800 Subject: [PATCH] Added getUnixTime --- src/esm/fp/index.js | 2 + src/esm/index.js | 1 + src/fp/getUnixTime/index.d.ts | 4 + src/fp/getUnixTime/index.js | 8 ++ src/fp/getUnixTime/index.js.flow | 51 +++++++++ src/fp/getUnixTimeWithOptions/index.d.ts | 4 + src/fp/getUnixTimeWithOptions/index.js | 8 ++ src/fp/getUnixTimeWithOptions/index.js.flow | 54 +++++++++ src/fp/index.js | 2 + src/fp/index.js.flow | 2 + src/getUnixTime/benchmark.js | 21 ++++ src/getUnixTime/index.d.ts | 4 + src/getUnixTime/index.js | 29 +++++ src/getUnixTime/index.js.flow | 52 +++++++++ src/getUnixTime/test.js | 41 +++++++ src/index.js | 1 + src/index.js.flow | 5 + typings.d.ts | 119 ++++++++++++++++++++ 18 files changed, 408 insertions(+) create mode 100644 src/fp/getUnixTime/index.d.ts create mode 100644 src/fp/getUnixTime/index.js create mode 100644 src/fp/getUnixTime/index.js.flow create mode 100644 src/fp/getUnixTimeWithOptions/index.d.ts create mode 100644 src/fp/getUnixTimeWithOptions/index.js create mode 100644 src/fp/getUnixTimeWithOptions/index.js.flow create mode 100644 src/getUnixTime/benchmark.js create mode 100644 src/getUnixTime/index.d.ts create mode 100644 src/getUnixTime/index.js create mode 100644 src/getUnixTime/index.js.flow create mode 100644 src/getUnixTime/test.js diff --git a/src/esm/fp/index.js b/src/esm/fp/index.js index 3a803a8b96..3b12ae64b1 100644 --- a/src/esm/fp/index.js +++ b/src/esm/fp/index.js @@ -130,6 +130,8 @@ export {default as getSeconds} from './getSeconds/index.js' export {default as getSecondsWithOptions} from './getSecondsWithOptions/index.js' export {default as getTime} from './getTime/index.js' export {default as getTimeWithOptions} from './getTimeWithOptions/index.js' +export {default as getUnixTime} from './getUnixTime/index.js' +export {default as getUnixTimeWithOptions} from './getUnixTimeWithOptions/index.js' export {default as getWeek} from './getWeek/index.js' export {default as getWeekOfMonth} from './getWeekOfMonth/index.js' export {default as getWeekOfMonthWithOptions} from './getWeekOfMonthWithOptions/index.js' diff --git a/src/esm/index.js b/src/esm/index.js index 133e5879a4..f3c983a3a2 100644 --- a/src/esm/index.js +++ b/src/esm/index.js @@ -65,6 +65,7 @@ export {default as getOverlappingDaysInIntervals} from './getOverlappingDaysInIn export {default as getQuarter} from './getQuarter/index.js' export {default as getSeconds} from './getSeconds/index.js' export {default as getTime} from './getTime/index.js' +export {default as getUnixTime} from './getUnixTime/index.js' export {default as getWeek} from './getWeek/index.js' export {default as getWeekOfMonth} from './getWeekOfMonth/index.js' export {default as getWeekYear} from './getWeekYear/index.js' diff --git a/src/fp/getUnixTime/index.d.ts b/src/fp/getUnixTime/index.d.ts new file mode 100644 index 0000000000..1b90af9bfd --- /dev/null +++ b/src/fp/getUnixTime/index.d.ts @@ -0,0 +1,4 @@ +// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it. + +import {getUnixTime} from 'date-fns/fp' +export = getUnixTime diff --git a/src/fp/getUnixTime/index.js b/src/fp/getUnixTime/index.js new file mode 100644 index 0000000000..3c57f0ba1c --- /dev/null +++ b/src/fp/getUnixTime/index.js @@ -0,0 +1,8 @@ +// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it. + +import fn from '../../getUnixTime/index.js' +import convertToFP from '../_lib/convertToFP/index.js' + +var getUnixTime = convertToFP(fn, 1) + +export default getUnixTime diff --git a/src/fp/getUnixTime/index.js.flow b/src/fp/getUnixTime/index.js.flow new file mode 100644 index 0000000000..c7625cba94 --- /dev/null +++ b/src/fp/getUnixTime/index.js.flow @@ -0,0 +1,51 @@ +// @flow +// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it. + +type Interval = { + start: Date | string | number, + end: Date | string | number +} + +type Options = { + weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6, + firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7, + additionalDigits?: 0 | 1 | 2, + locale?: Locale, + includeSeconds?: boolean, + addSuffix?: boolean, + unit?: 'second' | 'minute' | 'hour' | 'day' | 'month' | 'year', + roundingMethod?: 'floor' | 'ceil' | 'round' +} + +type Locale = { + formatDistance: Function, + formatRelative: Function, + localize: { + ordinalNumber: Function, + era: Function, + quarter: Function, + month: Function, + day: Function, + dayPeriod: Function + }, + formatLong: Object, + date: Function, + time: Function, + dateTime: Function, + match: { + ordinalNumber: Function, + era: Function, + quarter: Function, + month: Function, + day: Function, + dayPeriod: Function + }, + options?: { + weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6, + firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7 + } +} + +type CurriedFn1 = (a: A) => R + +declare module.exports: CurriedFn1 diff --git a/src/fp/getUnixTimeWithOptions/index.d.ts b/src/fp/getUnixTimeWithOptions/index.d.ts new file mode 100644 index 0000000000..f780ba09be --- /dev/null +++ b/src/fp/getUnixTimeWithOptions/index.d.ts @@ -0,0 +1,4 @@ +// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it. + +import {getUnixTimeWithOptions} from 'date-fns/fp' +export = getUnixTimeWithOptions diff --git a/src/fp/getUnixTimeWithOptions/index.js b/src/fp/getUnixTimeWithOptions/index.js new file mode 100644 index 0000000000..8e3923183e --- /dev/null +++ b/src/fp/getUnixTimeWithOptions/index.js @@ -0,0 +1,8 @@ +// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it. + +import fn from '../../getUnixTime/index.js' +import convertToFP from '../_lib/convertToFP/index.js' + +var getUnixTimeWithOptions = convertToFP(fn, 2) + +export default getUnixTimeWithOptions diff --git a/src/fp/getUnixTimeWithOptions/index.js.flow b/src/fp/getUnixTimeWithOptions/index.js.flow new file mode 100644 index 0000000000..bb47b6eccb --- /dev/null +++ b/src/fp/getUnixTimeWithOptions/index.js.flow @@ -0,0 +1,54 @@ +// @flow +// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it. + +type Interval = { + start: Date | string | number, + end: Date | string | number +} + +type Options = { + weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6, + firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7, + additionalDigits?: 0 | 1 | 2, + locale?: Locale, + includeSeconds?: boolean, + addSuffix?: boolean, + unit?: 'second' | 'minute' | 'hour' | 'day' | 'month' | 'year', + roundingMethod?: 'floor' | 'ceil' | 'round' +} + +type Locale = { + formatDistance: Function, + formatRelative: Function, + localize: { + ordinalNumber: Function, + era: Function, + quarter: Function, + month: Function, + day: Function, + dayPeriod: Function + }, + formatLong: Object, + date: Function, + time: Function, + dateTime: Function, + match: { + ordinalNumber: Function, + era: Function, + quarter: Function, + month: Function, + day: Function, + dayPeriod: Function + }, + options?: { + weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6, + firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7 + } +} + +type CurriedFn1 = (a: A) => R + +type CurriedFn2 = (a: A) => CurriedFn1 + | (a: A, b: B) => R + +declare module.exports: CurriedFn2 diff --git a/src/fp/index.js b/src/fp/index.js index b841b37b51..0cd0559f29 100644 --- a/src/fp/index.js +++ b/src/fp/index.js @@ -131,6 +131,8 @@ module.exports = { getSecondsWithOptions: require('./getSecondsWithOptions/index.js'), getTime: require('./getTime/index.js'), getTimeWithOptions: require('./getTimeWithOptions/index.js'), + getUnixTime: require('./getUnixTime/index.js'), + getUnixTimeWithOptions: require('./getUnixTimeWithOptions/index.js'), getWeek: require('./getWeek/index.js'), getWeekOfMonth: require('./getWeekOfMonth/index.js'), getWeekOfMonthWithOptions: require('./getWeekOfMonthWithOptions/index.js'), diff --git a/src/fp/index.js.flow b/src/fp/index.js.flow index 45ba6c6a5e..0bacd83d2f 100644 --- a/src/fp/index.js.flow +++ b/src/fp/index.js.flow @@ -191,6 +191,8 @@ declare module.exports: { getSecondsWithOptions: CurriedFn2, getTime: CurriedFn1, getTimeWithOptions: CurriedFn2, + getUnixTime: CurriedFn1, + getUnixTimeWithOptions: CurriedFn2, getWeek: CurriedFn1, getWeekOfMonth: CurriedFn1, getWeekOfMonthWithOptions: CurriedFn2, diff --git a/src/getUnixTime/benchmark.js b/src/getUnixTime/benchmark.js new file mode 100644 index 0000000000..dcb0ae0c1f --- /dev/null +++ b/src/getUnixTime/benchmark.js @@ -0,0 +1,21 @@ +// @flow +/* eslint-env mocha */ +/* global suite, benchmark */ + +import getUnixTime from '.' +import moment from 'moment' + +suite('getTime', function () { + benchmark('date-fns', function () { + return getUnixTime(this.date) + }) + + benchmark('Moment.js', function () { + return this.moment.unix() + }) +}, { + setup: function () { + this.date = new Date() + this.moment = moment() + } +}) diff --git a/src/getUnixTime/index.d.ts b/src/getUnixTime/index.d.ts new file mode 100644 index 0000000000..2aea6099a4 --- /dev/null +++ b/src/getUnixTime/index.d.ts @@ -0,0 +1,4 @@ +// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it. + +import {getUnixTime} from 'date-fns' +export = getUnixTime diff --git a/src/getUnixTime/index.js b/src/getUnixTime/index.js new file mode 100644 index 0000000000..5c44da75d0 --- /dev/null +++ b/src/getUnixTime/index.js @@ -0,0 +1,29 @@ +import getTime from '../getTime/index.js' + +/** + * @name getUnixTime + * @category Timestamp Helpers + * @summary Get the seconds timestamp of the given date. + * + * @description + * Get the seconds timestamp of the given date. + * + * @param {Date|String|Number} date - the given date + * @param {Options} [options] - the object with options. See [Options]{@link https://date-fns.org/docs/Options} + * @param {0|1|2} [options.additionalDigits=2] - passed to `toDate`. See [toDate]{@link https://date-fns.org/docs/toDate} + * @returns {Number} the timestamp + * @throws {TypeError} 1 argument required + * @throws {RangeError} `options.additionalDigits` must be 0, 1 or 2 + * + * @example + * // Get the timestamp of 29 February 2012 11:45:05: + * var result = getTime(new Date(2012, 1, 29, 11, 45, 5)) + * //=> 1330515905 + */ +export default function getUnixTime (dirtyDate, dirtyOptions) { + if (arguments.length < 1) { + throw new TypeError('1 argument required, but only ' + arguments.length + ' present') + } + + return Math.floor(getTime(dirtyDate, dirtyOptions) / 1000) +} diff --git a/src/getUnixTime/index.js.flow b/src/getUnixTime/index.js.flow new file mode 100644 index 0000000000..8ee7e62652 --- /dev/null +++ b/src/getUnixTime/index.js.flow @@ -0,0 +1,52 @@ +// @flow +// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it. + +type Interval = { + start: Date | string | number, + end: Date | string | number +} + +type Options = { + weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6, + firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7, + additionalDigits?: 0 | 1 | 2, + locale?: Locale, + includeSeconds?: boolean, + addSuffix?: boolean, + unit?: 'second' | 'minute' | 'hour' | 'day' | 'month' | 'year', + roundingMethod?: 'floor' | 'ceil' | 'round' +} + +type Locale = { + formatDistance: Function, + formatRelative: Function, + localize: { + ordinalNumber: Function, + era: Function, + quarter: Function, + month: Function, + day: Function, + dayPeriod: Function + }, + formatLong: Object, + date: Function, + time: Function, + dateTime: Function, + match: { + ordinalNumber: Function, + era: Function, + quarter: Function, + month: Function, + day: Function, + dayPeriod: Function + }, + options?: { + weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6, + firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7 + } +} + +declare module.exports: ( + date: Date | string | number, + options?: Options +) => number diff --git a/src/getUnixTime/test.js b/src/getUnixTime/test.js new file mode 100644 index 0000000000..cea1481f3d --- /dev/null +++ b/src/getUnixTime/test.js @@ -0,0 +1,41 @@ +// @flow +/* eslint-env mocha */ + +import assert from 'power-assert' +import getUnixTime from '.' + +describe('getUnixTime', function () { + it('returns the timestamp of the given date', function () { + var timestamp = 1483228800000 + var result = getUnixTime(new Date(timestamp)) + assert(result === Math.floor(timestamp / 1000)) + }) + + it('accepts a string', function () { + var timestamp = 1484503736150 + var result = getUnixTime(new Date(timestamp).toISOString()) + assert(result === Math.floor(timestamp / 1000)) + }) + + it('accepts a timestamp (and returns it unchanged)', function () { + var timestamp = 804643200000 + var result = getUnixTime(timestamp) + assert(result === Math.floor(timestamp / 1000)) + }) + + it('returns NaN if the given date is invalid', function () { + var result = getUnixTime(new Date(NaN)) + assert(isNaN(result)) + }) + + it('throws `RangeError` if `options.additionalDigits` is not convertable to 0, 1, 2 or undefined', function () { + var timestamp = 1483228800000 + // $ExpectedMistake + var block = getUnixTime.bind(null, new Date(timestamp), {additionalDigits: NaN}) + assert.throws(block, RangeError) + }) + + it('throws TypeError exception if passed less than 1 argument', function () { + assert.throws(getUnixTime.bind(null), TypeError) + }) +}) diff --git a/src/index.js b/src/index.js index f313df87b1..b4169d1da1 100644 --- a/src/index.js +++ b/src/index.js @@ -66,6 +66,7 @@ module.exports = { getQuarter: require('./getQuarter/index.js'), getSeconds: require('./getSeconds/index.js'), getTime: require('./getTime/index.js'), + getUnixTime: require('./getUnixTime/index.js'), getWeek: require('./getWeek/index.js'), getWeekOfMonth: require('./getWeekOfMonth/index.js'), getWeekYear: require('./getWeekYear/index.js'), diff --git a/src/index.js.flow b/src/index.js.flow index 74350920da..9c4a2bb647 100644 --- a/src/index.js.flow +++ b/src/index.js.flow @@ -409,6 +409,11 @@ declare module.exports: { options?: Options ) => number, + getUnixTime: ( + date: Date | string | number, + options?: Options + ) => number, + getWeek: ( date: Date | string | number, options?: Options diff --git a/typings.d.ts b/typings.d.ts index a5763240a3..6c23f8226e 100644 --- a/typings.d.ts +++ b/typings.d.ts @@ -501,6 +501,12 @@ declare module 'date-fns' { ): number namespace getTime {} + function getUnixTime ( + date: Date | string | number, + options?: Options + ): number + namespace getUnixTime {} + function getWeek ( date: Date | string | number, options?: Options @@ -1336,6 +1342,11 @@ declare module 'date-fns/getTime' { export = getTime } +declare module 'date-fns/getUnixTime' { + import {getUnixTime} from 'date-fns' + export = getUnixTime +} + declare module 'date-fns/getWeek' { import {getWeek} from 'date-fns' export = getWeek @@ -2051,6 +2062,11 @@ declare module 'date-fns/getTime/index' { export = getTime } +declare module 'date-fns/getUnixTime/index' { + import {getUnixTime} from 'date-fns' + export = getUnixTime +} + declare module 'date-fns/getWeek/index' { import {getWeek} from 'date-fns' export = getWeek @@ -2766,6 +2782,11 @@ declare module 'date-fns/getTime/index.js' { export = getTime } +declare module 'date-fns/getUnixTime/index.js' { + import {getUnixTime} from 'date-fns' + export = getUnixTime +} + declare module 'date-fns/getWeek/index.js' { import {getWeek} from 'date-fns' export = getWeek @@ -3549,6 +3570,12 @@ declare module 'date-fns/fp' { const getTimeWithOptions: CurriedFn2 namespace getTimeWithOptions {} + const getUnixTime: CurriedFn1 + namespace getUnixTime {} + + const getUnixTimeWithOptions: CurriedFn2 + namespace getUnixTimeWithOptions {} + const getWeek: CurriedFn1 namespace getWeek {} @@ -4668,6 +4695,16 @@ declare module 'date-fns/fp/getTimeWithOptions' { export = getTimeWithOptions } +declare module 'date-fns/fp/getUnixTime' { + import {getUnixTime} from 'date-fns/fp' + export = getUnixTime +} + +declare module 'date-fns/fp/getUnixTimeWithOptions' { + import {getUnixTimeWithOptions} from 'date-fns/fp' + export = getUnixTimeWithOptions +} + declare module 'date-fns/fp/getWeek' { import {getWeek} from 'date-fns/fp' export = getWeek @@ -6098,6 +6135,16 @@ declare module 'date-fns/fp/getTimeWithOptions/index' { export = getTimeWithOptions } +declare module 'date-fns/fp/getUnixTime/index' { + import {getUnixTime} from 'date-fns/fp' + export = getUnixTime +} + +declare module 'date-fns/fp/getUnixTimeWithOptions/index' { + import {getUnixTimeWithOptions} from 'date-fns/fp' + export = getUnixTimeWithOptions +} + declare module 'date-fns/fp/getWeek/index' { import {getWeek} from 'date-fns/fp' export = getWeek @@ -7528,6 +7575,16 @@ declare module 'date-fns/fp/getTimeWithOptions/index.js' { export = getTimeWithOptions } +declare module 'date-fns/fp/getUnixTime/index.js' { + import {getUnixTime} from 'date-fns/fp' + export = getUnixTime +} + +declare module 'date-fns/fp/getUnixTimeWithOptions/index.js' { + import {getUnixTimeWithOptions} from 'date-fns/fp' + export = getUnixTimeWithOptions +} + declare module 'date-fns/fp/getWeek/index.js' { import {getWeek} from 'date-fns/fp' export = getWeek @@ -8738,6 +8795,12 @@ declare module 'date-fns/esm' { ): number namespace getTime {} + function getUnixTime ( + date: Date | string | number, + options?: Options + ): number + namespace getUnixTime {} + function getWeek ( date: Date | string | number, options?: Options @@ -9573,6 +9636,11 @@ declare module 'date-fns/esm/getTime' { export default getTime } +declare module 'date-fns/esm/getUnixTime' { + import {getUnixTime} from 'date-fns/esm' + export default getUnixTime +} + declare module 'date-fns/esm/getWeek' { import {getWeek} from 'date-fns/esm' export default getWeek @@ -10288,6 +10356,11 @@ declare module 'date-fns/esm/getTime/index' { export default getTime } +declare module 'date-fns/esm/getUnixTime/index' { + import {getUnixTime} from 'date-fns/esm' + export default getUnixTime +} + declare module 'date-fns/esm/getWeek/index' { import {getWeek} from 'date-fns/esm' export default getWeek @@ -11003,6 +11076,11 @@ declare module 'date-fns/esm/getTime/index.js' { export default getTime } +declare module 'date-fns/esm/getUnixTime/index.js' { + import {getUnixTime} from 'date-fns/esm' + export default getUnixTime +} + declare module 'date-fns/esm/getWeek/index.js' { import {getWeek} from 'date-fns/esm' export default getWeek @@ -11786,6 +11864,12 @@ declare module 'date-fns/esm/fp' { const getTimeWithOptions: CurriedFn2 namespace getTimeWithOptions {} + const getUnixTime: CurriedFn1 + namespace getUnixTime {} + + const getUnixTimeWithOptions: CurriedFn2 + namespace getUnixTimeWithOptions {} + const getWeek: CurriedFn1 namespace getWeek {} @@ -12905,6 +12989,16 @@ declare module 'date-fns/esm/fp/getTimeWithOptions' { export default getTimeWithOptions } +declare module 'date-fns/esm/fp/getUnixTime' { + import {getUnixTime} from 'date-fns/esm/fp' + export default getUnixTime +} + +declare module 'date-fns/esm/fp/getUnixTimeWithOptions' { + import {getUnixTimeWithOptions} from 'date-fns/esm/fp' + export default getUnixTimeWithOptions +} + declare module 'date-fns/esm/fp/getWeek' { import {getWeek} from 'date-fns/esm/fp' export default getWeek @@ -14335,6 +14429,16 @@ declare module 'date-fns/esm/fp/getTimeWithOptions/index' { export default getTimeWithOptions } +declare module 'date-fns/esm/fp/getUnixTime/index' { + import {getUnixTime} from 'date-fns/esm/fp' + export default getUnixTime +} + +declare module 'date-fns/esm/fp/getUnixTimeWithOptions/index' { + import {getUnixTimeWithOptions} from 'date-fns/esm/fp' + export default getUnixTimeWithOptions +} + declare module 'date-fns/esm/fp/getWeek/index' { import {getWeek} from 'date-fns/esm/fp' export default getWeek @@ -15765,6 +15869,16 @@ declare module 'date-fns/esm/fp/getTimeWithOptions/index.js' { export default getTimeWithOptions } +declare module 'date-fns/esm/fp/getUnixTime/index.js' { + import {getUnixTime} from 'date-fns/esm/fp' + export default getUnixTime +} + +declare module 'date-fns/esm/fp/getUnixTimeWithOptions/index.js' { + import {getUnixTimeWithOptions} from 'date-fns/esm/fp' + export default getUnixTimeWithOptions +} + declare module 'date-fns/esm/fp/getWeek/index.js' { import {getWeek} from 'date-fns/esm/fp' export default getWeek @@ -18574,6 +18688,11 @@ interface dateFns { options?: Options ): number + getUnixTime( + date: Date | string | number, + options?: Options + ): number + getWeek( date: Date | string | number, options?: Options