2013-08-23 157 views
-2

我剛剛得到這個想通了:PHP:時間 - 「今天」 - 「昨天」的日期,而不是小時

$dates = date(" d-m-y",$forum_tid); 
if ($dates == date(' d-m-y')) { 
    $day_name = 'This day'; 
} else if($dates === date(" d-m-y", strtotime("-1 day"))) { 
    $day_name = 'Yesterday'; 
} else { 
    $day_name = 'Another day'; 
} 
echo "$day_name"; 

現在,這個運行了24小時時鐘系統。現在我想讓它按日期工作。 (如果時間是同一天,它說「這一天」,如果它是f.ex 23-08-13之前的日期,那麼它顯示「昨天」)

我到底該怎麼做?希望這是一個更多人想知道的問題!

+2

你真的應該使用[DATETIME] (http://www.php.net/manual/en/class.datetime.php)。 – Mike

+0

是的,但是我爲什麼要這樣做呢? – Marius

+0

我被告知你可以從閱讀中學到很多東西(http://php.net/DateTime)。它有點過時,但適用於某些人。 –

回答

1

隨着DateTime類:

$date = new DateTime(); 
$date->setTimestamp($forum_tid); 

$today = new DateTime(); 
$yesterday = new DateTime('-1day'); 

switch(TRUE) { 

    case $today->format('m-d') === $date->format('m-d'): 
     $day_name = 'This day'; 
    break: 

    case $yesterday->format('m-d') === $date->format('m-d'): 
     $day_name = 'Yesterday'; 
    break; 

    default: 
     $day_name = 'Another day'; 

} 

echo "$day_name"; 
+0

我從來沒有見過這樣的開關。對我來說,使用'if/else'會更具可讀性。但每一個他自己。 – Mike

+0

@Mike使用'switch(TRUE)'可以讓你在switch語句中進行嚴格的比較。否則,switch語句像'=='而不是'==='那樣處理case語句。我真的經常使用它,因爲我認爲這更具可讀性。但是,在這種情況下,if/else也會起作用。請查閱我的答案以獲取更多信息:http://stackoverflow.com/a/18346764/171318 – hek2mgl

-1

請勿使用===進行字符串比較。

你可以得到12點與

strtotime(date("Y-m-d")); 

所以,你可以這樣做:

if(strtotime($mydate) > strtotime(date("Y-m-d"))) { 
    echo "Today"; 
} elseif(strtotime($mydate) > strtotime(date("Y-m-d", strtotime("-1 day")))) { 
    echo "Yesterday"; 
} elseif(strtotime($mydate) > strtotime(date("Y-m-d", strtotime("-1 week")))) { 
    echo "In the last week"; 
} else { 
    echo "Older"; 
} 
+4

誰不使用字符串比較的==='? – putvande

+0

是的,爲什麼不使用它? – Marius

+0

===對於非基元不安全。相反,strcmp()是比較字符串的可靠和二進制安全方法。 – Dave

相關問題