2014-01-16 86 views
2

我必須做一個檢查,如果它已經超過了某個時間和日期。 通常這對我來說很容易,但是必須檢查的時間是從數據庫中獲得的時間的半小時。它是否已經過計算時間和日期?

比方說數據庫說:「2014-01-16」和「20:00」。在這種情況下,我必須檢查它是否已經過去2014年1月16日的「21:30」。

我現在有一些代碼爲我工作,但它只是說它已經過去了,如果日期和時間時間已經過去了(假設它是在明顯通過之後的一天,它也必須在21:30之後才能這麼說)。

這裏是我到目前爲止的代碼:

// Get the date today and date of the event to check if the customer can still buy tickets 
$dateToday = strtotime(date('Y-m-d')); 
// $details['Datum'] == 2014-01-15 
$dateStart = strtotime($details['Datum']); 

// Check if it's half an hour before the event starts, if so: don't sell tickets 
$timeNow = strtotime(date('H:i')); 
// $details['BeginTijd'] == 20:00 
$substrStart = substr($details['BeginTijd'], 0, 5); 
$startTimeHalfHour = strtotime($substrStart) - 1800; 

if($timeNow > $startTimeHalfHour && $dateToday >= $dateStart) { 
    // It's past the given time limit 
    $tooLate = true; 
} else { 
    // There's still time 
    $tooLate = false; 
} 

正如你所看到的,它需要的時間和日期是過去的規定限度。在這個例子中,如果它已經過了15日,它應該將$ tooLate設置爲true,或者如果它已經過了15日的21:30。

回答

1

您可以使用strtotime("+30 minutes")在30分鐘內獲得時間。

所以假設$開始時間是活動的開始時間(UNIX時間),你可以做

$current = strtotime("+30 minutes"); 

if($current > $startTime){ 
$tooLate = true; 
} 
else{ 
$tooLate = false; 
} 

順便說一句,像$dateToday = strtotime(date('Y-m-d'));線沒有太大的意義。寫作$dateToday = time();具有相同的結果。

strtotime()給你一個Unix時間戳(自1970年以來的秒數)。 time()也是。

要生成$startTime(節目開始時間),您應該輸入完整的日期和時間字符串(例如2014-01-15 18:10:00)並將其傳遞到strtotime。它會將其轉換爲Unix時間。

如果你想要的是零下30分鐘,事件發生的時間,你可以寫:

$maxTime = strtotime("-30 minutes",$startTime); //where $startTime is the start time of the event, in Unix time. 

來源:http://il1.php.net/strtotime

+0

但我需要時間爲事件開始 - 30分鐘,而不是當前時間+30。在這種情況下會是什麼時間? – user1433479

+0

那麼最終的結果是一樣的。您可以檢查當前時間+30分鐘,或者事件時間減去30.邏輯相同。但是如果你真的想要事件+30,我也將這一點加入到我的答案中。 –

+0

謝謝,這完美的作品:)。我有舊的$ dateToday = strtotime(日期('Y-m-d'));因爲我不擅長日期/時間計算,所以我查了一下如何在線。當您使用不同的資源時,代碼可能會變得混亂。 – user1433479

2

這是最好日期時間字符串轉換爲Unix的時間戳這樣的比較。這可以通過DateTime類來完成。例如:

$dateToday = new DateTime(); 
$date = new DateTime('2014-01-16 20:00'); 
// Adds an hour to the date. 
$date->modify('+ 1 hour'); 

if ($dateToday > $date) { 
    // Do stuff. 
} 
+0

好吧,但這並不能真正解決我的問題。我仍然需要從限制日期起30分鐘起飛。 – user1433479

+0

Unix時間戳表示以秒爲單位的時間(從1970開始)。因此,您可以通過增加1800秒來輕鬆操作它。或者你可以使用DateTime的'modify'方法。 – aross

+0

您不需要轉換爲時間戳。 DateTime對象直接可比,所以這將工作: - 'if($ dateToday> $ date){// do stuff}' – vascowhite