如何在php中将日期时间的第一个对象与另一个日期时间对象进行比较

时间:2015-01-29 12:59:36

标签: php date date-comparison

这里我使用一个日期时间对象就是这个

 $cdate  = date('d/m/Y h:i:sa')  

和另一个日期时间对象是这个

$udate = date("d/m/Y h:i:sa", strtotime("72 hours"));

用于比较我正在使用此条件

 if($cdate >= $udate)

但问题是这个...在这种情况下它只比较一天而不是整个日期和时间。

5 个答案:

答案 0 :(得分:4)

date()返回的字符串仅在某些情况下具有可比性。您应该使用其对象始终具有可比性的DateTime()

$cdate  = new DateTime();
$udate = new DateTime('+3 days');
if($cdate >= $udate) {

}

答案 1 :(得分:0)

if(strtotime($cdate) >= strtotime($udate)){
// your condition
}

希望有所帮助:)

答案 2 :(得分:0)

date()函数返回一个字符串 - 而不是DateTime对象。因此,您正在进行的>=比较是字符串比较,而不是日期/时间的比较。

如果你真的想进行字符串比较,请使用这种排序有意义的格式,例如ISO 8601.你可以用格式'c'来做到这一点。

然而,更好的方法是比较实际的DateTime对象或整数timstamps(例如你从time()获得的内容)。

答案 3 :(得分:0)

您的代码在比较日期时出错,因为日期返回字符串。

试试这个:

$cdate = new DateTime();
$udate = new DateTime('72 hours');

if($udate > $cdate) {
    echo 'something';
}

答案 4 :(得分:-1)

您不比较日期时间,并且代码中没有对象(例如OOP中的对象)。 $cdate$udatestrings,这就是使用字符串比较规则(即字典顺序)进行比较的原因。

您可以使用时间戳(只是整数秒):

// Use timestamps for comparison and storage
$ctime = time();
$utime = strtotime("72 hours");
// Format them to strings for display
$cdate = date('d/m/Y h:i:sa', $ctime);
$udate = date('d/m/Y h:i:sa', $utime);
// Compare timestamps
if ($ctime < $utime) {
    // Display strings
    echo("Date '$cdate' is before date '$udate'.\n");
}

或者您可以使用DateTime类型的对象:

$cdate = new DateTime('now');
$udate = new DateTime('72 hours');

// You can compare them directly
if ($cdate < $udate) {
    // And you can ask them to format nicely for display
    echo("Date '".$cdate->format('d/m/Y h:i:sa')."' is before date '".
         $udate->format('d/m/Y h:i:sa')."'\n");
}