Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

adding previousDay and its variations #2522

Merged
merged 8 commits into from Sep 16, 2021
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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'
import subDays from '../subDays'
import { 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 {Day} day - day of the week
kossnocorp marked this conversation as resolved.
Show resolved Hide resolved
* @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)
)
})
})
25 changes: 25 additions & 0 deletions src/previousFriday/index.ts
@@ -0,0 +1,25 @@
import requiredArgs from '../_lib/requiredArgs/index'
import previousDay from '../previousDay/index'
import toDate from '../toDate/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(toDate(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)
})
})
25 changes: 25 additions & 0 deletions src/previousMonday/index.ts
@@ -0,0 +1,25 @@
import requiredArgs from '../_lib/requiredArgs/index'
import previousDay from '../previousDay/index'
import toDate from '../toDate/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(toDate(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)
})
})
25 changes: 25 additions & 0 deletions src/previousSaturday/index.ts
@@ -0,0 +1,25 @@
import requiredArgs from '../_lib/requiredArgs/index'
import previousDay from '../previousDay/index'
import toDate from '../toDate/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))
* //=> Fri June 19 2021 00:00:00
tan75 marked this conversation as resolved.
Show resolved Hide resolved
*/
export default function previousSaturday(date: Date | number): Date {
requiredArgs(1, arguments)
return previousDay(toDate(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)
})
})
25 changes: 25 additions & 0 deletions src/previousSunday/index.ts
@@ -0,0 +1,25 @@
import requiredArgs from '../_lib/requiredArgs/index'
import previousDay from '../previousDay/index'
import toDate from '../toDate/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))
* //=> Fri June 20 2021 00:00:00
tan75 marked this conversation as resolved.
Show resolved Hide resolved
*/
export default function previousSunday(date: Date | number): Date {
requiredArgs(1, arguments)
return previousDay(toDate(date), 0)
}