2015-10-23 25 views
1

我有一個重定向腳本,旨在不在某些時間之間重定向。我使用日期(「G」),但如果我使用這個說12:30,它不會工作,因爲我相信030被讀爲0而不是30.將一個單獨的語句,如if $hour = 0 {$hour = $hour + 1},然後編寫$milTime 130工作?如果是這樣,這是最好的方法嗎?如果不是,那會起什麼作用?PHP日期(「G)」如何使午夜不等於0

下面是一個不能正確讀取的時間塊示例。

<?php 
date_default_timezone_set('America/Los_Angeles'); 
     $hour = date("G"); 
     $min = date("i"); 
     $milTime = $hour . $min ; 

     if($milTime < 030 || $milTime > 045) 
     { 
     header('Location: http://havetowatchit.com/watchit.php'); 
     exit(); 
     } 
?> 
+1

在PHP中,整數以'0 '被認爲是八進制的。所以'030'確實是'24','045'確實是'37'。你可能會想把這個數字轉換成像「秒(或分鐘)到當天」那樣的數字,然後與之比較。或者使用適當的時間戳或者日期/時間對象。 –

+1

另外,只要'$ milTime = date(「Gi」);' – AbraCadaver

+0

我不知道這件事。好吧,我可以轉換成八進制,一切都很好。謝謝@JonathanKuhn – TSpinVirus

回答

0

你只需要擺脫你的前導零。如上所述,numbers starting with zero被解釋爲八進制。但隨着PHP的dynamic typing,字符串 「030」(半過去午夜)可以被數字處理爲30:

$ php -a 
Interactive shell 

php > $time = "030"; 
php > var_dump($time < 40); 
bool(true) 
php > var_dump($time > 20); 
bool(true) 
php > var_dump($time > 40); 
bool(false) 

所以,你的代碼可以是這樣的:

<?php 
    date_default_timezone_set('America/Los_Angeles'); 
    $time = date("Gi"); 
    if($time < 30 || $time > 45) { 
     header('Location: http://havetowatchit.com/watchit.php'); 
     exit(); 
    } 
?>