2010-09-02 101 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