The Algorithms logo
The Algorithms
AboutDonate

Zellers Congruence Algorithm

p
// 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]
}