Zellers Congruence Algorithm

T
H
// 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]
}