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