Doğrulanıyor damgası PHP ile örtüşmektedir

2 Cevap php

Benim veritabanı başlatmak ve değişkenleri sonunda, tarih tutar. Kullanıcı bunları seçer gibi benim kodu başlangıç ​​ve onları yakala, ve böylece (bütün bir foreach döngüsü içinde) gibi damgaları çevirebiliriz ..

$selectionDate    = strtotime($timeQry['date']);
$startTimes[]       = strtotime($timeQry['start'],$selectionDate);
$endTimes[]         = strtotime($timeQry['end'],$selectionDate);

Bu bana damgaları olarak doğru başlangıç ​​ve bitiş saatlerini verir. Ben o zaman doğrulamak için bir mantık deyimi var ve seçilen kez herhangi bir örtüşme olmadığını görmek ....

if(($startTimes[1] < $startTimes[0]) && ($endTimes[1] > $startTimes[0]) ||
($startTimes[1] > $startTimes[0]) && ($startTimes[1] < $endTimes[0]) )
{   
    echo "overlap"
}

Bu kod tarihini kullanır, çünkü son kez biri gece yarısı 12 (diyelim 02:00) sonra, o zaman damgası başlangıç ​​saati daha küçük olması durumunda ise ancak rezervasyon başlamak istiyorum, çoğu zaman gayet iyi çalışıyor. Bu mantık başarısız olmasına neden olur ve örtüşme cevapsız.

Ben yapmayı düşündüm:

if( ($endTimes[$k] >= $selectionDate) )
{
	$endTimes[] 	= strtotime($timeQry['end'],$newDate+ 1253574000);
}
else
{
	$endTimes[] 	= strtotime($timeQry['end'],$selectionDate);
}

    //...run same logic query

Hangi bir gün sonra yeni bir tarih yaratır. Ama ben bu konuda gitmek için doğru yol olduğunu sanmıyorum. Herkes bana yardımcı olabilir eğer çok minnettar olacaktır. Bana bu benim kafa kaşıyor var! Çok teşekkürler

2 Cevap

Neden herhangi bir hokkabazlık kaçınarak, iki sütun için DATETIME kullanmayın.

Ben neredeyse var düşünüyorum, ama bu güzel bir yaklaşım olabilir:

while(/* iterate */) {
    //...
    $selectionDate = strtotime($timeQry['date']);
    $startTime  = strtotime($timeQry['start'], $selectionDate);
    $endTime    = strtotime($timeQry['end'], $selectionDate);
    if($endTime < $startTime) {
        $endTime += 86400;
    }
    $startTimes[] = $startTime;
    $endTimes[]   = $endTime;
}

Cemkalyoncu belirtildiği gibi ancak bunun yerine üç "yarım" olanlar, iki bağımsız damgalarını kullanmalısınız. Ben senin uygulama bilmiyorum, ama iki tam damgalarını kullanarak aynı zaman farkı fazla 24 saattir davaları kapsayacak. Bu, mevcut kurulum ile çalışmaz.