Add Zeller's Congruence Algorithm in Math (#996)

This commit is contained in:
merelymyself
2022-04-27 20:49:12 +08:00
committed by GitHub
parent 7881cb5f16
commit 5641b6faea
2 changed files with 43 additions and 0 deletions

View File

@ -0,0 +1,26 @@
// 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]
}

View File

@ -0,0 +1,17 @@
import { zellersCongruenceAlgorithm } from '../ZellersCongruenceAlgorithm'
function testZeller (day, month, year, expected) {
test('Testing on ' + day + '/' + month + '/' + year, () => {
expect(zellersCongruenceAlgorithm(day, month, year)).toBe(expected)
})
}
test('Testing on this/should/throw', () => {
expect(() => {
zellersCongruenceAlgorithm('this', 'should', 'error')
}).toThrowError(new TypeError('Arguments are not all numbers.'))
})
testZeller(25, 1, 2013, 'Friday')
testZeller(26, 1, 2013, 'Saturday')
testZeller(16, 4, 2022, 'Saturday')
testZeller(25, 4, 2022, 'Monday')