forked from date-fns/date-fns
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Adding
previousDay
and its variations (date-fns#2522)
Added new functions: `previousDay`, `previousMonday`, `previousTuesday`, `previousWednesday`, `previousThursday`, `previousFriday`, `previousSaturday` and `previousSunday`. Co-authored-by: Lucas Silva <lucas.silva@codeminer42.com> Co-authored-by: Tetiana <ttobin@protonmail.ch> Co-authored-by: Sasha Koss <koss@nocorp.me>
- Loading branch information
1 parent
1ba9b57
commit 4fb69e4
Showing
17 changed files
with
586 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
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,36 @@ | ||
import requiredArgs from '../_lib/requiredArgs/index' | ||
import getDay from '../getDay/index' | ||
import subDays from '../subDays/index' | ||
import type { Day } from '../types' | ||
|
||
/** | ||
* @name previousDay | ||
* @category Weekday Helpers | ||
* @summary When is the previous day of the week? | ||
* | ||
* @description | ||
* When is the previous day of the week? 0-6 the day of the week, 0 represents Sunday. | ||
* | ||
* @param {Date | number} date - the date to check | ||
* @param {number} day - day of the week | ||
* @returns {Date} - the date is the previous day of week | ||
* @throws {TypeError} - 2 arguments required | ||
* | ||
* @example | ||
* // When is the previous Monday before Mar, 20, 2020? | ||
* const result = previousDay(new Date(2020, 2, 20), 1) | ||
* //=> Mon Mar 16 2020 00:00:00 | ||
* | ||
* @example | ||
* // When is the previous Tuesday before Mar, 21, 2020? | ||
* const result = previousDay(new Date(2020, 2, 21), 2) | ||
* //=> Tue Mar 17 2020 00:00:00 | ||
*/ | ||
export default function previousDay(date: Date | number, day: Day): Date { | ||
requiredArgs(2, arguments) | ||
|
||
let delta = getDay(date) - day | ||
if (delta <= 0) delta += 7 | ||
|
||
return subDays(date, delta) | ||
} |
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,80 @@ | ||
/* eslint-env mocha */ | ||
|
||
import assert from 'assert' | ||
import previousDay from '.' | ||
|
||
describe('previousDay', function () { | ||
it('returns the previous Monday given various dates after the same', function () { | ||
assert.deepStrictEqual( | ||
previousDay(new Date(2021, 5 /* Jun */, 18), 1), | ||
new Date(2021, 5 /* Jun */, 14) | ||
) | ||
|
||
assert.deepStrictEqual( | ||
previousDay(new Date(2021, 5 /* Jun */, 17), 1), | ||
new Date(2021, 5 /* Jun */, 14) | ||
) | ||
|
||
assert.deepStrictEqual( | ||
previousDay(new Date(2021, 5 /* Jun */, 14), 1), | ||
new Date(2021, 5 /* Jun */, 7) | ||
) | ||
|
||
assert.deepStrictEqual( | ||
previousDay(new Date(2021, 5 /* Jun */, 9), 1), | ||
new Date(2021, 5 /* Jun */, 7) | ||
) | ||
|
||
assert.deepStrictEqual( | ||
previousDay(new Date(2021, 5 /* Jun */, 8), 1), | ||
new Date(2021, 5 /* Jun */, 7) | ||
) | ||
|
||
assert.deepStrictEqual( | ||
previousDay(new Date(2021, 5 /* Jun */, 7), 1), | ||
new Date(2021, 4 /* May */, 31) | ||
) | ||
}) | ||
|
||
it('returns the previous Tuesday given the Saturday after it', function () { | ||
assert.deepStrictEqual( | ||
previousDay(new Date(2021, 5 /* Jun */, 26), 2), | ||
new Date(2021, 5 /* Jun */, 22) | ||
) | ||
}) | ||
|
||
it('returns the previous Wednesday given the Saturday after it', function () { | ||
assert.deepStrictEqual( | ||
previousDay(new Date(2021, 5 /* Jun */, 26), 3), | ||
new Date(2021, 5 /* Jun */, 23) | ||
) | ||
}) | ||
|
||
it('returns the previous Thursday given the Saturday after it', function () { | ||
assert.deepStrictEqual( | ||
previousDay(new Date(2021, 5 /* Jun */, 26), 4), | ||
new Date(2021, 5 /* Jun */, 24) | ||
) | ||
}) | ||
|
||
it('returns the previous Friday given the Saturday after it', function () { | ||
assert.deepStrictEqual( | ||
previousDay(new Date(2021, 5 /* Jun */, 26), 5), | ||
new Date(2021, 5 /* Jun */, 25) | ||
) | ||
}) | ||
|
||
it('returns the previous Saturday given the Saturday after it', function () { | ||
assert.deepStrictEqual( | ||
previousDay(new Date(2021, 5 /* Jun */, 26), 6), | ||
new Date(2021, 5 /* Jun */, 19) | ||
) | ||
}) | ||
|
||
it('returns the previous Sunday given the day is Sunday', function () { | ||
assert.deepStrictEqual( | ||
previousDay(new Date(2021, 5 /* Jun */, 27), 0), | ||
new Date(2021, 5 /* Jun */, 20) | ||
) | ||
}) | ||
}) |
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,24 @@ | ||
import requiredArgs from '../_lib/requiredArgs/index' | ||
import previousDay from '../previousDay/index' | ||
|
||
/** | ||
* @name previousFriday | ||
* @category Weekday Helpers | ||
* @summary When is the previous Friday? | ||
* | ||
* @description | ||
* When is the previous Friday? | ||
* | ||
* @param {Date | number} date - the date to start counting from | ||
* @returns {Date} the previous Friday | ||
* @throws {TypeError} 1 argument required | ||
* | ||
* @example | ||
* // When is the previous Friday before Jun, 19, 2021? | ||
* const result = previousFriday(new Date(2021, 5, 19)) | ||
* //=> Fri June 18 2021 00:00:00 | ||
*/ | ||
export default function previousFriday(date: Date | number): Date { | ||
requiredArgs(1, arguments) | ||
return previousDay(date, 5) | ||
} |
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,42 @@ | ||
/* eslint-env mocha */ | ||
|
||
import assert from 'assert' | ||
import previousFriday from '.' | ||
|
||
describe('previousFriday', function () { | ||
it('returns the previous Friday given various dates after the same', function () { | ||
assert.deepStrictEqual( | ||
previousFriday(new Date(2021, 5 /* Jun */, 5)), | ||
new Date(2021, 5 /* Jun */, 4) | ||
) | ||
|
||
assert.deepStrictEqual( | ||
previousFriday(new Date(2021, 5 /* Jun */, 6)), | ||
new Date(2021, 5 /* Jun */, 4) | ||
) | ||
|
||
assert.deepStrictEqual( | ||
previousFriday(new Date(2021, 5 /* Jun */, 11)), | ||
new Date(2021, 5 /* Jun */, 4) | ||
) | ||
|
||
assert.deepStrictEqual( | ||
previousFriday(new Date(2021, 5 /* Jun */, 14)), | ||
new Date(2021, 5 /* Jun */, 11) | ||
) | ||
|
||
assert.deepStrictEqual( | ||
previousFriday(new Date(2021, 5 /* Jun */, 15)), | ||
new Date(2021, 5 /* Jun */, 11) | ||
) | ||
|
||
assert.deepStrictEqual( | ||
previousFriday(new Date(2021, 5 /* Jun */, 24)), | ||
new Date(2021, 5 /* Jun */, 18) | ||
) | ||
}) | ||
|
||
it('returns `Invalid Date` if the given date is invalid', function () { | ||
assert(previousFriday(new Date(NaN)) instanceof Date) | ||
}) | ||
}) |
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,24 @@ | ||
import requiredArgs from '../_lib/requiredArgs/index' | ||
import previousDay from '../previousDay/index' | ||
|
||
/** | ||
* @name previousMonday | ||
* @category Weekday Helpers | ||
* @summary When is the previous Monday? | ||
* | ||
* @description | ||
* When is the previous Monday? | ||
* | ||
* @param {Date | number} date - the date to start counting from | ||
* @returns {Date} the previous Monday | ||
* @throws {TypeError} 1 argument required | ||
* | ||
* @example | ||
* // When is the previous Monday before Jun, 18, 2021? | ||
* const result = previousMonday(new Date(2021, 5, 18)) | ||
* //=> Mon June 14 2021 00:00:00 | ||
*/ | ||
export default function previousMonday(date: Date | number): Date { | ||
requiredArgs(1, arguments) | ||
return previousDay(date, 1) | ||
} |
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,42 @@ | ||
/* eslint-env mocha */ | ||
|
||
import assert from 'assert' | ||
import previousMonday from '.' | ||
|
||
describe('previousMonday', function () { | ||
it('returns the previous Monday given various dates after the same', function () { | ||
assert.deepStrictEqual( | ||
previousMonday(new Date(2021, 5 /* Jun */, 5)), | ||
new Date(2021, 4 /* May */, 31) | ||
) | ||
|
||
assert.deepStrictEqual( | ||
previousMonday(new Date(2021, 5 /* Jun */, 6)), | ||
new Date(2021, 4 /* May */, 31) | ||
) | ||
|
||
assert.deepStrictEqual( | ||
previousMonday(new Date(2021, 5 /* Jun */, 7)), | ||
new Date(2021, 4 /* May */, 31) | ||
) | ||
|
||
assert.deepStrictEqual( | ||
previousMonday(new Date(2021, 5 /* Jun */, 14)), | ||
new Date(2021, 5 /* Jun */, 7) | ||
) | ||
|
||
assert.deepStrictEqual( | ||
previousMonday(new Date(2021, 5 /* Jun */, 15)), | ||
new Date(2021, 5 /* Jun */, 14) | ||
) | ||
|
||
assert.deepStrictEqual( | ||
previousMonday(new Date(2021, 5 /* Jun */, 16)), | ||
new Date(2021, 5 /* Jun */, 14) | ||
) | ||
}) | ||
|
||
it('returns `Invalid Date` if the given date is invalid', function () { | ||
assert(previousMonday(new Date(NaN)) instanceof Date) | ||
}) | ||
}) |
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,24 @@ | ||
import requiredArgs from '../_lib/requiredArgs/index' | ||
import previousDay from '../previousDay/index' | ||
|
||
/** | ||
* @name previousSaturday | ||
* @category Weekday Helpers | ||
* @summary When is the previous Saturday? | ||
* | ||
* @description | ||
* When is the previous Saturday? | ||
* | ||
* @param {Date | number} date - the date to start counting from | ||
* @returns {Date} the previous Saturday | ||
* @throws {TypeError} 1 argument required | ||
* | ||
* @example | ||
* // When is the previous Saturday before Jun, 20, 2021? | ||
* const result = previousSaturday(new Date(2021, 5, 20)) | ||
* //=> Sat June 19 2021 00:00:00 | ||
*/ | ||
export default function previousSaturday(date: Date | number): Date { | ||
requiredArgs(1, arguments) | ||
return previousDay(date, 6) | ||
} |
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,42 @@ | ||
/* eslint-env mocha */ | ||
|
||
import assert from 'assert' | ||
import previousSaturday from '.' | ||
|
||
describe('previousSaturday', function () { | ||
it('returns the previous Saturday given various dates after the same', function () { | ||
assert.deepStrictEqual( | ||
previousSaturday(new Date(2021, 5 /* Jun */, 7)), | ||
new Date(2021, 5 /* Jun */, 5) | ||
) | ||
|
||
assert.deepStrictEqual( | ||
previousSaturday(new Date(2021, 5 /* Jun */, 8)), | ||
new Date(2021, 5 /* Jun */, 5) | ||
) | ||
|
||
assert.deepStrictEqual( | ||
previousSaturday(new Date(2021, 5 /* Jun */, 12)), | ||
new Date(2021, 5 /* Jun */, 5) | ||
) | ||
|
||
assert.deepStrictEqual( | ||
previousSaturday(new Date(2021, 5 /* Jun */, 16)), | ||
new Date(2021, 5 /* Jun */, 12) | ||
) | ||
|
||
assert.deepStrictEqual( | ||
previousSaturday(new Date(2021, 5 /* Jun */, 17)), | ||
new Date(2021, 5 /* Jun */, 12) | ||
) | ||
|
||
assert.deepStrictEqual( | ||
previousSaturday(new Date(2021, 5 /* Jun */, 24)), | ||
new Date(2021, 5 /* Jun */, 19) | ||
) | ||
}) | ||
|
||
it('returns `Invalid Date` if the given date is invalid', function () { | ||
assert(previousSaturday(new Date(NaN)) instanceof Date) | ||
}) | ||
}) |
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,24 @@ | ||
import requiredArgs from '../_lib/requiredArgs/index' | ||
import previousDay from '../previousDay/index' | ||
|
||
/** | ||
* @name previousSunday | ||
* @category Weekday Helpers | ||
* @summary When is the previous Sunday? | ||
* | ||
* @description | ||
* When is the previous Sunday? | ||
* | ||
* @param {Date | number} date - the date to start counting from | ||
* @returns {Date} the previous Sunday | ||
* @throws {TypeError} 1 argument required | ||
* | ||
* @example | ||
* // When is the previous Sunday before Jun, 21, 2021? | ||
* const result = previousSunday(new Date(2021, 5, 21)) | ||
* //=> Sun June 20 2021 00:00:00 | ||
*/ | ||
export default function previousSunday(date: Date | number): Date { | ||
requiredArgs(1, arguments) | ||
return previousDay(date, 0) | ||
} |
Oops, something went wrong.