Merhaba,
Belli saatler arası hizmet veren kullanıcılar var ve bu bir durum bilgisi olarak profilde listelenmektedir. Örneğin
Şimdiki Saat: 15:00
Erhan - 08:00 ile 16:00 arası hizmet vermektedir. Şu an MÜSAİT
Ayşe - 08:00 ile 22:00 arası hizmet vermektedir. Şu an MÜSAİT
Tarık - 11:00 ile 14:00 arası hizmet vermektedir. Şu an MÜSAİT DEĞİL
gibi.
kontrolü
if(in_array( $simdikisaat , range( $baslangic , $bitis ) ) ){ .....
ile yapmaktayım.
fakat sorunum var eğer;
Şimdiki saat: 01:00 ise,
Fatih - 22:00 ile 04:00 arası hizmet vermektedir. Şu an MÜSAİT DEĞİL
durumu oluşuyor. Bu saat olayını profesyonel bi şekilde çözmem gerek.
Teşekkürler.
Yardım - Şimdiki Saat Belirlenen Zaman Aralığında mı?
8
●756
- 14-07-2013, 00:42:47Kimlik doğrulama veya yönetimden onay bekliyor.Hemşerim birazdan çözümü paylaşayım.
Şuan kodunu yazıyorum.
edit: uykum geldi heralde benim olayı çözemedim test için ufak bi betik yazdım işinize yarayabilir.
<?php function check($start, $end) { $_timestamp_now = strtotime(date('H:i')); $_timestamp_start = strtotime($start); $_timestamp_end = strtotime($end); /* var_dump([ 'a' => ($_timestamp_now >= $_timestamp_start), 'b' => ($_timestamp_now <= $_timestamp_end), 'c' => ($_timestamp_now >= $_timestamp_start) || ($_timestamp_now <= $_timestamp_end), 'd' => ($_timestamp_now >= $_timestamp_start) && ($_timestamp_now <= $_timestamp_end), 'e' => ($_timestamp_start >= $_timestamp_end), 'f' => ($_timestamp_end >= $_timestamp_start), 'g' => ($_timestamp_start <= $_timestamp_end), 'h' => ($_timestamp_end <= $_timestamp_start), ($_timestamp_now <= $_timestamp_end) ]);*/ if($_timestamp_start >= $_timestamp_end) { $timestamp_now = strtotime(date('d.m.Y H:i')); $timestamp_start = strtotime(sprintf('%s %s', date('d.m.Y'), $start)); $timestamp_end = strtotime(sprintf('%s.%s %s', (date('d') + 1), date('m.Y'), $end)); echo substr(date('H', $timestamp_end), 0, 1); if(substr(date('H', $timestamp_end), 0, 1) != '0') return false; else if($timestamp_now <= $timestamp_start) return false; else if($timestamp_now >= $timestamp_end) return false; else return true; } else { $timestamp_now = strtotime(date('d.m.Y H:i')); $timestamp_start = strtotime(sprintf('%s %s', date('d.m.Y'), $start)); $timestamp_end = strtotime(sprintf('%s.%s %s', (date('d') + 1), $end)); if($timestamp_now <= $timestamp_start) return true; else if($timestamp_now >= $timestamp_end) return true; else return false; } # return (($_timestamp_now >= $_timestamp_start) || ($_timestamp_now <= $_timestamp_end)) ? true : false; } # check("22:00", "21:00"); # check("22:00", "04:00"); // echo check("22:00", "04:00"); if(check("22:00", "04:00")) echo 'saat aralığı içinde!'; else echo 'saat aralığı dışında!'; - 14-07-2013, 05:19:31Kimlik doğrulama veya yönetimden onay bekliyor.Yav ne ettin öylesaintx adlı üyeden alıntı: mesajı görüntüle

Basitçe başlangıç bitişden büyükse 24'e tamamlayacaksın. Misal:
function durum($simdi, $basla, $bitis){ if($bitis < $basla){ $a = $basla; while($a<=24){ $av[] = $a; $a++; } $a = 1; while($a<= $bitis){ $av[] = $a; $a++; } }else{ $av = range($basla,$bitis); } if(in_array($simdi,$av)) echo 'MÜSAİT'; else echo 'MÜSAİT DEĞİL'; }Kullanımı:
$simdi = 1; $basla = 22; $bitis = 4; durum($saat, $basla, $bitis); //MÜSAİT
- 14-07-2013, 11:13:59acayip adlı üyeden alıntı: mesajı görüntüle
$simdi = 1; $basla = 22; $bitis = 24; durum($simdi, $basla, $bitis); //MÜSAİT DEĞİL ?
- 14-07-2013, 14:40:21acayip adlı üyeden alıntı: mesajı görüntüle
Şuan saat 1 ise (1am) işe başlama 22 ve bitis 4(am) ise malesef fonksiyonunuz çalışmıyor. - 14-07-2013, 16:03:01fonksiyon için tam tarih bilgisi gerekicek sanırım?agnosi adlı üyeden alıntı: mesajı görüntüle
- 14-07-2013, 21:51:22Arkadaşım çalışıyor sorun yok. Ben fonksiyona gönderirken $bitis yerine $saat yazmışım. Bu arada o anki saati date('G') olarak yani 0 dolgusuz alırsan daha iyi olur :agnosi adlı üyeden alıntı: mesajı görüntüle
$simdi = 1; $basla = 22; $bitis = 4; durum($simdi, $basla, $bitis); //MÜSAİT
- 14-07-2013, 21:51:45http://stackoverflow.com/a/17145145/1561146
function check_time($t1, $t2, $tn) { $t1 = +str_replace(":", "", $t1); $t2 = +str_replace(":", "", $t2); $tn = +str_replace(":", "", $tn); if ($t2 >= $t1) { return $t1 <= $tn && $tn < $t2; } else { return ! ($t2 <= $tn && $tn < $t1); } } $tests = array( array("16:00:00", "22:30:00", "15:00:00"), array("16:00:00", "22:30:00", "16:00:00"), array("16:00:00", "22:30:00", "22:29:59"), array("16:00:00", "22:30:00", "22:30:00"), array("16:00:00", "22:30:00", "23:59:59"), array("22:30:00", "16:00:00", "22:29:59"), array("22:30:00", "16:00:00", "22:30:00"), array("22:30:00", "16:00:00", "15:59:59"), array("22:30:00", "16:00:00", "16:00:00"), array("22:30:00", "16:00:00", "17:00:00") ); foreach($tests as $test) { list($t1, $t2, $t0) = $test; echo "$t1 - $t2 contains $t0: " . (check_time($t1, $t2, $t0) ? "yes" : "no") . "\n"; } - 15-07-2013, 00:09:26Evet o saat nerden çıktıysa benimde dikkatimden kaçmış. Teşekkür ederim. Sorunsuz çalışıyor.acayip adlı üyeden alıntı: mesajı görüntüle
Hemşerim Ogün, kodun biraz karmaşık olduğu için tercih etmedim. İlgin için teşekkür ederim.
Bende olayı iç içe if ile çözdüm onuda yazayım birilerinin işine yarayabilir.
<?php $simdi="10"; $baslangic ="8"; $bitis = "22"; if ($bitis < $baslangic){ if ($simdi >= $baslangic OR $simdi <= $bitis) { } else { echo "kapalı"; } } else { if ($simdi >= $baslangic AND $simdi <= $bitis) { } else { echo "kapalı"; } } ?>
Şuan kodunu yazıyorum.