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

1 Answer

0 votes
package main

import (
    "fmt"
)

// Zeller's Congruence implementation
// Returns the day of the week for a given date.
func dayOfWeek(d int, m int, y int) string {

    // Zeller's output mapping:
    // 0 = Saturday, 1 = Sunday, 2 = Monday, ... 6 = Friday
    names := []string{
        "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
    }

    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
    return names[h]
}

func main() {
    d, m, y := 30, 5, 2024

    fmt.Println(dayOfWeek(d, m, y))
}



/*
run:

Thursday

*/

 



answered 7 hours ago by avibootz
...