2014-07-03 40 views
-3

我在比較兩個日期時遇到問題。我知道這聽起來有點愚蠢,但我希望你們都嘗試這個例子。比較日期中的strtotime邏輯錯誤

$a = date('d-m-Y', strtotime('2014-07-03')); 
$b = date('d-m-Y', strtotime('2014-03-17')); 
$c = date('d-m-Y', strtotime('2015-03-16')); 

if(($a > $b) && ($a < $c)) { 
    echo "1"; 
} 
else { 
    echo "2"; 
} 

結果是2怎麼樣?

+2

我看到了未來,您將通過某種形式的超級更大的權力來參觀。 –

+0

你在比較字符串,而不是日期。 PHP有** NO **想法'01-02-03'是一個日期。它只是一系列的人物。 –

回答

14

你的「邏輯」是錯誤的。

xkcd
> xkcd

$a = '2014-07-03'; 
$b = '2014-03-17'; 
$c = '2015-03-16'; 

if(($a > $b) && ($a < $c)) { 
    echo "1"; // it works! 
} 

大端格式是真棒。

0

您的日期/的strtotime功能後,你有:

$a = '03-07-2014' 
$b = '17-03-2014' 
$c = '16-03-2015' 

所以,當你比較,$ a小於$ B,因爲它的第一天比較。

4

因爲你的日期格式是而不是有利於比較。比較日期時使用YYYY-MM-DD格式(或使用DateTime()對象)。這是因爲04-01-2014與字符串比較時小於05-01-2014。

$a = '2014-07-03'; 
$b = '2014-03-17'; 
$c = '2015-03-16'; 

if(($a > $b) && ($a < $c)) { 
    echo "1"; 
} 
else { 
    echo "2"; 
} 

使用日期時間(或時)對象:

$a = new DateTime('2014-07-03'); 
$b = new DateTime('2014-03-17'); 
$c = new DateTime('2015-03-16'); 

if(($a > $b) && ($a < $c)) { 
    echo "1"; 
} 
else { 
    echo "2"; 
} 
+1

啊,你在。 [我認爲](https://stackoverflow.com/questions/24556316/strtotime-logical-error-in-comparing-dates#comment38032155_24556316)你永遠不會在這裏大聲笑 –

+0

對不起,我遲到了。被我需要解決的AngularJS問題分心了。 –

+0

不要冒汗,也不需要對不起;-)對不起,當你錯過了一杯冰涼的咖啡時,但是......然後,有些人喜歡它冷。 Gaspacho任何人? –