2010-09-02 98 views
3

如何比較兩個DateTime對象是否具有相同的日期,月份和年份? 問題是他們有不同的小時/分鐘/秒。PHP DateTime平等

+0

OK,請不要再收到選票。 OP澄清了無論何時都要比較兩個日期的要求。對不起,疏忽了。 – BoltClock 2010-09-02 19:37:34

回答

2

沒有用DateTime對象做這件事的好方法。所以你不得不這樣做,讓我們說,不是很好的東西。

$nDate1 = clone $date1; 
$nDate2 = clone $date2; 

//We convert both to UTC to avoid any potential problems. 
$utc = new DateTimeZone('UTC'); 
$nDate1->setTimezone($utc); 
$nDate2->setTimezone($utc); 

//We get rid of the time, and just keep the date part. 
$nDate1->setTime(0, 0, 0); 
$nDate2->setTime(0, 0, 0); 

if ($nDate1 == $nDate2) { 
    //It's the same day 
} 

這會起作用,但就像我說的那樣,它不好。

在附註中,最近的經驗告訴我它總是最好的以確保兩個日期都在同一個時區,所以我添加了代碼以防萬一。

+0

如果我申請date_default_timezone_set('GMT')這是否足夠代替$ nDate1-> setTimezone? – danidacar 2010-09-02 19:38:33

+0

我相信如此,因爲我剛纔提到的問題就是這樣做的。 – BoltClock 2010-09-02 19:43:12

+0

不,如果例如DateTime已經使用'2020-04-23 20:30:20 + 0500'形式的字符串構造,那麼默認的時區對它沒有任何影響,並且您會遇到問題。 – Juan 2010-09-02 19:45:35

-1
if(date('dmY', $date1) == date('dmY', $date2)) 

你可以把它放在一個函數...

function compare_dates($date1, $date2){ 
    if(date('dmY', $date1) == date('dmY', $date2)) 
    return true ; 

    return false ; 
} 

是最有用的;)

+0

Date期望第二個參數是一個整數,所以這不起作用,因爲$ date1和$ date2是DateTime對象。 $ date-> getTimestamp()解決了這個問題。 – 2012-02-21 12:48:01

0

如何:

$date1->format('Ymd') == $date2->format('Ymd'); 

:WQ