/ / Zeitintervall mit 30 Minuten zwischen zwei Datumsangaben füllen - php, datetime

Füllen Sie Zeitintervall mit 30 Minuten zwischen 2 Daten - php, datetime

Ich habe 2 Zeitzeichenfolgen zum Beispiel OPEN = 11:00 und geschlossen ist 02:45

jetzt ist die 02:00 am nächsten tag also ich folgende:

    //open = string 11:00
//closed= string 02:45
$open = DateTime::createFromFormat("H:i", $open);
$closed = DateTime::createFromFormat("H:i", $closed);
if ($open > $closed) $closed->modify("+1 day");

jetzt habe ich 2 richtige datetime formate. Nun möchte ich ein Zeitintervall von 30 Minuten von der offenen Zeit bis zur Schließzeit einstellen. Wie kann ich das machen? Ich habe gelesen, dass ich so hinzufügen kann

->add(new DateInterval("PT30M") b

Aber es wird bis zum Ende des Tages hinzugefügt. Aber in diesem Fall ist es bis zum nächsten Tag geöffnet

Wie kann ich das machen?

Antworten:

1 für die Antwort № 1

Sie waren auf dem richtigen Weg. So funktioniert es mit DateInterval("PT30M").

$strOpen = "11:00";
$strClose = "02:45";

$open = DateTime::createFromFormat("H:i", $strOpen);
$closed = DateTime::createFromFormat("H:i", $strClose);
if ($open > $closed) $closed->modify("+1 day");
// I display not only the time, but the day as well to show that it is
// incrementing to the next day.
echo "open:  " . $open->format("D H:i") . "<br />n";
while ($open < $closed) {
$open->add(new DateInterval("PT30M"));
// because incrementing on the half hour and our finish is on the 15 min,
// the last is $open < $close in the while statement will be true but
// this loop will generate a time after $closed so we do another check
// now to eliminate that issue
if ($open < $closed) {
echo "+30min: " . $open->format("D H:i") . "<br />n";
}
}
echo "closed: " . $closed->format("D H:i") . "<br />n";