Naptár óraátállítás kizárása

Sziasztok,

Adott egy naptáram, amiben PHP-vel generálom a kezdő időpontokat.
Az időpontok éjféltől éjfélig mennek, és 2 órás lépésekben számol a rendszer.
Tehát:
00:00
02:00
04:00
06:00
stb.

A gondom az, hogy most lesz az óraátállítás március 27-én, és ott így generálódnak most az értékek:
00:00
03:00
05:00
stb

Én szeretném továbbra is a 2 órás lépcsőket megtartani.
Van erre valamilyen lehetőség szerintetek?
Jelenleg egyszerűen így generálom az időpontokat (a példa kedvéért)

<?php
$start = strtotime("2022-03-27 00:00");
$end = strtotime("2022-03-28 00:00");
$step = 2 * 60 * 60;
$range = range($start, $end, $step);
foreach($range as $hour) {
	echo date("H:i", $hour)."<br/>";
}
?>

Nagyon örülnék egy gyors megoldásnak. :)

Hozzászólások

Szerkesztve: 2022. 03. 11., p – 14:23

Ha fixen párosak az órák, akkor nem kell a time-ből származtatni. Hiszen minden nap 00:00-23:59-ig szalad.
Ötlet: válaszd szét a dátum kezelését (date) és az órákat. Utóbbiak 00:00-tól 2-esével lépnek.

<?php
$start = strtotime("2022-03-27 12:00");
$napok = 3;

for ($nap = 0; $nap < $napok; $nap++) {
    $datum = date("Y.m.d.", $start + 86400*$nap);
    for ($hour = 0; $hour < 24; $hour +=2) {
        printf("%s %02d:00<br>\n", $datum, $hour);
    }
}
?>

... most látom, strftime php-ban deprecated lett. Átírtam date()-ra.

Köszi a tippet, végül tegnap sikerült úgy megoldani, ahogy szerettem volna.

E szerint amikor időátállítás van, akkor is marad a 2 órás lépés és a végén az adott nap unix timestamp értékeit kapom meg. 

00:00
03:00
04:00
06:00
stb

Megosztom itt is, hátha másnak is hasznos lesz még. 

class GenerateSlots {

    /**
     * Generate time slots, need to escape summer/winter time shift
     */
    static function generate($date, $start, $end, $step) {
        $min_hour = date("G", $start);
        $max_hour = date("G", $end);

        if($max_hour == 0) $max_hour = 24 - ($step / 60 / 60);
        $step_hour = ($step / 60 / 60);
        $times = [];
        for ($hour = $min_hour; $hour <= $max_hour; $hour += $step_hour) {
            if(self::isInt($hour)) {
                $current = $hour.":00";
            } else {
                $current = floor($hour).":30";
            }
            $current_unix = strtotime($date." ".$current);
            $times[$current_unix] = $current_unix;
        }
        return $times;
    }

    static function isInt($int){
        return preg_match('@^[-]?[0-9]+$@',$int) === 1;
    }
}