Skip to content

Commit

Permalink
Adding previousDay and its variations (#2522)
Browse files Browse the repository at this point in the history
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
4 people committed Sep 16, 2021
1 parent 6bfde29 commit 0e5d948
Show file tree
Hide file tree
Showing 17 changed files with 586 additions and 0 deletions.
8 changes: 8 additions & 0 deletions src/index.js 100644 → 100755
Expand Up @@ -175,6 +175,14 @@ export { default as nextWednesday } from './nextWednesday/index'
export { default as parse } from './parse/index'
export { default as parseISO } from './parseISO/index'
export { default as parseJSON } from './parseJSON/index'
export { default as previousDay } from './previousDay/index'
export { default as previousMonday } from './previousMonday/index'
export { default as previousTuesday } from './previousTuesday/index'
export { default as previousWednesday } from './previousWednesday/index'
export { default as previousThursday } from './previousThursday/index'
export { default as previousFriday } from './previousFriday/index'
export { default as previousSaturday } from './previousSaturday/index'
export { default as previousSunday } from './previousSunday/index'
export { default as quartersToMonths } from './quartersToMonths/index'
export { default as quartersToYears } from './quartersToYears/index'
export { default as roundToNearestMinutes } from './roundToNearestMinutes/index'
Expand Down
36 changes: 36 additions & 0 deletions src/previousDay/index.ts
@@ -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)
}
80 changes: 80 additions & 0 deletions src/previousDay/test.ts
@@ -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)
)
})
})
24 changes: 24 additions & 0 deletions src/previousFriday/index.ts
@@ -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)
}
42 changes: 42 additions & 0 deletions src/previousFriday/test.ts
@@ -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)
})
})
24 changes: 24 additions & 0 deletions src/previousMonday/index.ts
@@ -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)
}
42 changes: 42 additions & 0 deletions src/previousMonday/test.ts
@@ -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)
})
})
24 changes: 24 additions & 0 deletions src/previousSaturday/index.ts
@@ -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)
}
42 changes: 42 additions & 0 deletions src/previousSaturday/test.ts
@@ -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)
})
})
24 changes: 24 additions & 0 deletions src/previousSunday/index.ts
@@ -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)
}

0 comments on commit 0e5d948

Please sign in to comment.