Regina Schlauklug: PHP Wochenende

Beitrag lesen

Hallo und Danke, doch leider geht es nicht

Wenn die Dokumentation zu den relativen Datumsformaten nicht verständlich oder ungenügend ist, dann mach es einfach und stupid:

<?php
/* Unit-Test
$LE="<br>\n";
$zeitpunkt[] = date('U');
$zeitpunkt[] = date('U', mktime(16, 30, 0, 1, 7, 2000));
$zeitpunkt[] = date('U', mktime(16, 31, 0, 1, 7, 2000));
$zeitpunkt[] = date('U', mktime(17, 0, 0, 1, 8, 2000));
$zeitpunkt[] = date('U', mktime(17, 0, 0, 1, 9, 2000));
$zeitpunkt[] = date('U', mktime(22, 30, 0, 1, 9, 2000));
$zeitpunkt[] = date('U', mktime(22, 31, 0, 1, 9, 2000));

foreach ($zeitpunkt as $zp) {
    if ( ifWeekend($zp) ) {
        echo date('Y m d H:i :: N G ::  D, H:i', $zp) . " : Positiv$LE";
    } else {
        echo date('Y m d H:i :: N G ::  D, H:i', $zp) . " : Negativ$LE";
    }
}
//*/

function ifWeekend
    (
        $timestamp,
        $firstWeekendDay    = 5,  //Freitag
        $firstWeekendHour   = 16,
        $firstWeekendMinute = 31,
        $lastWeekendDay     = 7,  //Sonntag
        $LastWeekendHour    = 22,
        $LastWeekendMinute  = 30
    ) {

    $weekDay    = date('N', $timestamp);
    $hour       = date('G', $timestamp);
    $minute     = date('i', $timestamp);

    if (
            (
                    $weekDay == $firstWeekendDay
                and $hour    >  $firstWeekendHour
            )

        or  (
                    $weekDay == $firstWeekendDay
                and $hour    == $firstWeekendHour
                and $minute  >= $firstWeekendMinute
            )

        or  (
                    $weekDay >  $firstWeekendDay
                and $weekDay <  $lastWeekendDay
            )

        or  (
                    $weekDay == $lastWeekendDay
                and $hour    <  $LastWeekendHour
            )

        or  (
                    $weekDay == $lastWeekendDay
                and $hour    == $LastWeekendHour
                and $minute  <= $LastWeekendMinute
            )

    )   {
        return true;
    } else {
        return false;
    }
}

Wenn Deine Definition von "Wochenende" aber auch wahlweise den "Montag 6:00" Uhr als Ende vorsehen sollte oder können soll, dann brauchst Du ein wenig wenig mehr if(and or)-then-else.