2017-09-21 109 views
0

之間我已經if語句以下工作:如果沒有聲明的日期

$current=date('d/m/Y'); 
$next_year=date('y')+1; 

$q1a='01/04/'.date('Y'); 
$q1b='30/06/'.date('Y'); 

$q2a='01/07/'.date('Y'); 
$q2b='30/09/'.date('Y'); 

$q3a='01/09/'.date('Y'); 
$q3b='31/12/'.date('Y'); 

$q4a='01/01/20'.$next_year; 
$q4b='31/03/20'.$next_year; 

if (($current > $q1a) && ($current < $q1b)) 
{ 
    $currentquarter='Q1'; 
} 
elseif (($current > $q2a) && ($current < $q2b)) 
{ 
    $currentquarter='Q2'; 
} 
elseif (($current > $q3a) && ($current < $q3b)) 
{ 
    $currentquarter='Q3'; 
} 
elseif (($current > $q4a) && ($current < $q4b)) 
{ 
    $currentquarter='Q4'; 
} 

echo $currentquarter; 

但即使它應該是Q3爲今天的日期在2017年1月9日和31/12/2017之間返回Q1

+2

你不能比較d/M/Y日期使用''<', '>等既可以使用,將基本比較運算符(時間戳或年月日)工作的格式字符串,或使用適當的'DateTime'對象。 – iainn

+0

你的變量是字符串。它們不能與日期對象進行比較。首先將它們轉換爲Date對象。檢查[此鏈接](http://php.net/manual/en/datetime.format.php) – Sidra

+0

旁註:爲什麼'20'。 date('y')+ 1'而不是'date('Y')+ 1'?此代碼被硬編碼爲假定在2010年之後和2100年之前執行;這可能是一個足夠安全的假設,但在處理日期時仍然是一個可怕的習慣。 – deceze

回答

4

你沒有比較日期,你在詞彙上比較字符串。例如: -

'21/03/2017' > '01/04/2017' 

20較大,因此這將是真實的。字符按字符排列第一個字符串「大於」第二個字符。再次,這是一個詞法比較,而不是數字比較。

至少您需要將排列順序顛倒爲Y/m/d以獲得正確的結果;但您應該真正構造DateTime對象或UNIX時間戳以正確進行實際的日期/數字比較。

2

對於PHP日期比較,你可以使用strtotime()功能

$date1 = '07/28/2018'; 
$date2 = '07/28/2017'; 

if(strtotime($date1) < strtotime($date2)) 
{ 
    echo 'Date2 is greater then date1'; 
} 
else 
{ 
    echo 'Date1 is greater then date2'; 
} 
1

這將幫助您簡化的比較來檢索當前季度。

function CurrentQuarter(){ 
    $n = date('n'); 
    if($n < 4){ 
      return "1"; 
    } elseif($n > 3 && $n <7){ 
      return "2"; 
    } elseif($n >6 && $n < 10){ 
      return "3"; 
    } elseif($n >9){ 
      return "4"; 
    } 
} 

Code Source