Welcome to collectivesolver - Programming & Software Q&A with code examples. A website with trusted programming answers. All programs are tested and work.

Contact: aviboots(AT)netvision.net.il

Semrush - keyword research tool

Create your online store today with Shopify

Turn ChatGPT, Claude, Gemini, And CoPilot Into Your Personal Assistant, Business Coach, Content Creator, And More

AFFILIATE MARKETING Your all-in-one performance engine Manage affiliates, creators, and customer referrals in one unified platform—turning every partnership into measurable growth

Secure & Reliable Web Hosting, Free Domain, Free SSL, 1-Click WordPress Install, Expert 24/7 Support

Disclosure: My content contains affiliate links.

43,236 questions

56,139 answers

573 users

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 May 31 by avibootz
...