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

1 Answer

0 votes
// Zeller's Congruence implementation
// Returns the day of the week for a given date.
function dayOfWeek($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
    }

    $K = $y % 100;        // Year of the century (last two digits)
    $J = intdiv($y, 100); // Zero-based century (e.g., 2024 → 20)

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

    $term1 = $d;                        // day of month
    $term2 = intdiv(13 * ($m + 1), 5);  // month adjustment
    $term3 = $K;                        // year of century
    $term4 = intdiv($K, 4);             // leap years in century
    $term5 = intdiv($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];
}

$d = 30;
$m = 5;
$y = 2024;

echo dayOfWeek($d, $m, $y), PHP_EOL;



/*
run:

Thursday

*/

 



answered 9 hours ago by avibootz
edited 9 hours ago by avibootz
...