mirror of
https://github.com/TheAlgorithms/JavaScript.git
synced 2025-07-04 07:29:47 +08:00

* chore: Switch to Node 20 + Vitest * chore: migrate to vitest mock functions * chore: code style (switch to prettier) * test: re-enable long-running test Seems the switch to Node 20 and Vitest has vastly improved the code's and / or the test's runtime! see #1193 * chore: code style * chore: fix failing tests * Updated Documentation in README.md * Update contribution guidelines to state usage of Prettier * fix: set prettier printWidth back to 80 * chore: apply updated code style automatically * fix: set prettier line endings to lf again * chore: apply updated code style automatically --------- Co-authored-by: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Co-authored-by: Lars Müller <34514239+appgurueu@users.noreply.github.com>
36 lines
813 B
JavaScript
36 lines
813 B
JavaScript
// Zeller's Congruence Algorithm finds the day of the week from the Gregorian Date. Wikipedia: https://en.wikipedia.org/wiki/Zeller%27s_congruence
|
|
export const zellersCongruenceAlgorithm = (day, month, year) => {
|
|
if (
|
|
typeof day !== 'number' ||
|
|
typeof month !== 'number' ||
|
|
typeof year !== 'number'
|
|
) {
|
|
throw new TypeError('Arguments are not all numbers.')
|
|
}
|
|
const q = day
|
|
let m = month
|
|
let y = year
|
|
if (month < 3) {
|
|
m += 12
|
|
y -= 1
|
|
}
|
|
day =
|
|
(q +
|
|
Math.floor((26 * (m + 1)) / 10) +
|
|
(y % 100) +
|
|
Math.floor((y % 100) / 4) +
|
|
Math.floor(Math.floor(y / 100) / 4) +
|
|
5 * Math.floor(y / 100)) %
|
|
7
|
|
const days = [
|
|
'Saturday',
|
|
'Sunday',
|
|
'Monday',
|
|
'Tuesday',
|
|
'Wednesday',
|
|
'Thursday',
|
|
'Friday'
|
|
]
|
|
return days[day]
|
|
}
|