PHP Fügen Sie mit der Funktion zwei Stunden zu einem Datum innerhalb der angegebenen Stunden hinzu

Wie würde ich die Bedingungen strukturieren, um zwei Stunden nur für Daten zwischen 08:30 Uhr morgens und 18:30 Uhr abends hinzuzufügen, außer samstags und sonntags?

Für den Fall, dass eine Zeit nahe der Grenze angegeben wird (z. B. 17:30 am Dienstag), sollte die verbleibende Zeit zum Beginn des nächsten "gültigen" Zeitraums addiert werden.

Beispiel: Wenn das angegebene Datum am Dienstag um 17:30 Uhr liegt, führt die zweistündige Addition am Mittwoch um 9:30 Uhr (17:30 Uhr + 1 Stunde = 18:30 Uhr, 8:30 Uhr + der Rest um 1 Stunde = 9 Uhr): 30). Wenn das angegebene Datum am Freitag um 17:00 Uhr liegt, ist das Ergebnis am Montag um 9:00 Uhr (Freitag um 17:00 Uhr + 1,5 Stunden = 18:30 Uhr, Montag um 8:30 Uhr + der Rest um 0,5 Stunden = 9:00 Uhr).

Ich weiß, wie man einfach zwei Stunden wie folgt hinzufügt:

$idate1 = strtotime($_POST['date']);
$time1 = date('Y-m-d G:i', strtotime('+120 minutes', $idate1));
$_POST['due_date']  = $time1;

Ich habe diese Funktion ausprobiert und es funktioniert großartig, außer wenn ich ein Datum wie (2013-11-26 12:30) benutze, gibt er mir (2013-11-27 04:30:00) das Problem ist mit 12:30

function addRollover($givenDate, $addtime) {
    $starttime = 8.5*60; //Start time in minutes (decimal hours * 60)
    $endtime = 18.5*60; //End time in minutes (decimal hours * 60)

    $givenDate = strtotime($givenDate);

    //Get just the day portion of the given time
    $givenDay = strtotime('today', $givenDate);
    //Calculate what the end of today's period is
    $maxToday = strtotime("+$endtime minutes", $givenDay);
    //Calculate the start of the next period
    $nextPeriod = strtotime("tomorrow", $givenDay); //Set it to the next day
    $nextPeriod = strtotime("+$starttime minutes", $nextPeriod);  //And add the starting time
    //If it's the weekend, bump it to Monday
    if(date("D", $nextPeriod) == "Sat") {
        $nextPeriod = strtotime("+2 days", $nextPeriod);
    }

    //Add the time period to the new day
    $newDate = strtotime("+$addtime", $givenDate);
    //print "$givenDate -> $newDate\n";
    //print "$maxToday\n";
    //Get the new hour as a decimal (adding minutes/60)
    $hourfrac = date('H',$newDate) + date('i',$newDate)/60;
    //print "$hourfrac\n";

    //Check if we're outside the range needed
    if($hourfrac < $starttime || $hourfrac > $endtime) {
        //We're outside the range, find the remainder and add it on
        $remainder = $newDate - $maxToday;
        //print "$remainder\n";
        $newDate = $nextPeriod + $remainder;
    }

    return $newDate;
}

Antworten auf die Frage(1)

Ihre Antwort auf die Frage