How to find the day of the week on any given date in Ruby

1 Answer

0 votes
# Zeller's Congruence implementation
# Returns the day of the week for a given date.
def day_of_week(d, m, y)

  # Zeller's output mapping:
  # 0 = Saturday, 1 = Sunday, 2 = Monday, ... 6 = Friday
  names = [
    "Saturday", "Sunday", "Monday", "Tuesday",
    "Wednesday", "Thursday", "Friday"
  ]

  # In Zeller's formula, January and February are counted
  # as months 13 and 14 of the previous year.
  if m < 3
    m += 12   # Convert Jan → 13, Feb → 14
    y -= 1    # Move to previous year
  end

  k = y % 100   # Year of the century (last two digits)
  j = y / 100   # Zero-based century (e.g., 2024 → 20)

  # Zeller's formula (clearer step-by-step version):

  term1 = d                     # day of month
  term2 = (13 * (m + 1)) / 5    # month adjustment
  term3 = k                     # year of century
  term4 = k / 4                 # leap years in century
  term5 = j / 4                 # leap centuries
  term6 = 5 * j                 # century correction

  # Combine all terms and take modulo 7
  h = (term1 + term2 + term3 + term4 + term5 + term6) % 7

  # Return the corresponding weekday name
  names[h]
end

d = 30
m = 5
y = 2024

puts day_of_week(d, m, y)



=begin
run:

Thursday

=end

 



answered 7 hours ago by avibootz
...