Başlangıç ​​ve bitiş zamanı, 1 saatlik parçalara bölünür

3 Cevap php

Ben bir timestamp biçiminde bir başlangıç ​​ve bitiş zamanı vardır. Ben örneğin 1 saat timeslotlar içine bu bölmek istiyorum.

$t1 = strtotime('2010-05-06 12:00:00');
$t2 = strtotime('2010-05-06 18:00:00');

$timeslots = array();

while ($t1 < $t2) {
$t1 = $t1 + 3600;
$timeslots[] = $t1;
}

foreach ( $timeslots as $slot ) {
echo date("Y-m-d H:i:s", $slot) . '<br/>';
}

Bu bunu yapmak için en etkili yoldur ya da bunu yapmak için daha iyi, daha çok yönlü bir yolu var mı?

Bana çok verimli değil düşündürüyor İzin bellek boyutu bitkin: Farklı uzunluk timeslotlar için diğer sayılar ile çalışırken Bazen bir Ölümcül hata vardı. Şimdi oluyor gibi görünmüyor olsa ...

(Ben bir rezervasyon Sytem inşa ediyorum)

3 Cevap

Denedin

while ($t1 < $t2) {
   $t1 = strtotime('+1 hour', $t1);
   $timeslots[] = date('Y-m-d H:i:s', $t1);
}

foreach ( $timeslots as $slot ) {
   echo $slot . '<br/>';
}

Biraz aynı ama temiz. Ve söylendiği gibi strtotime artık yıl gibi tarih değişiklikleri idare edecek. Ne PHP bellek limiti ayarlanır? Çok düşük olabilir.

Yerine

$t1 = $t1 + 3600;

Sen ile daha iyi olacak

$t1 = strtotime('+1 hour', $t1);

İkincisi, tasarruf saatine ayarlamak yaş sıçrama, vb olacak

Aksi takdirde, kod gayet iyi görünüyor. Eğer bellek bitti eğer nedeniyle sonsuz bir döngü muhtemelen oldu. Muhtemelen $ t2 $ t1 daha büyük olduğundan emin olmak için kodu eklemek için, ve onlar değilse onları geçmek istiyoruz.

php 5.3 kullanıyor

$dateTimes = new DatePeriod(
    new DateTime($start),
    new DateInterval('PT1H'),
    new DateTime($end)
);

foreach ($dateTimes as $dt) {
    echo $dt->format('Y-m-d H:i:s'), "\n";
}