как мне сравнить первый объект даты и времени с другим объектом даты и времени в php


Здесь я использую один объект даты и времени - это

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

И еще один объект даты и времени - это

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

Для сравнения я использую это условие

 if($cdate >= $udate)

Но проблема в том, this...in в этом случае сравнивается только день, а не вся дата и время.

Author: John Conde, 2015-01-29

5 answers

Строки, возвращаемые из date(), сопоставимы только при определенных обстоятельствах. Вы должны использовать DateTime(), объекты которого всегда сопоставимы:

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

}
 4
Author: John Conde, 2015-01-29 13:02:53
if(strtotime($cdate) >= strtotime($udate)){
// your condition
}

Надеюсь, это поможет:)

 0
Author: vignesh.D, 2015-01-29 13:02:55

Функция date() возвращает строку, а не объект DateTime. Таким образом, сравнение >=, которое вы выполняете, является сравнением строки, а не сравнением дат/времени.

Если вы действительно хотите выполнить сравнение строк, используйте формат, в котором такая сортировка будет иметь смысл, например ISO 8601. Вы можете сделать это тривиально с помощью формата "c".

Однако гораздо лучше было бы сравнить фактические объекты даты и времени или целочисленные временные метки (например, то, что вы получите от time()).

 0
Author: Prisoner, 2015-01-29 13:07:13

Ваш код неверен для сравнения дат, потому что дата возвращает строку.

Попробуйте это:

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

if($udate > $cdate) {
    echo 'something';
}
 0
Author: Deifinger, 2015-01-29 13:47:46

Вы не сравниваете даты и время, и нет объектов (как в OOP) в вашем коде. $cdate и $udate являются строками , поэтому они сравниваются с использованием правил сравнения строк (т.Е. порядка словаря).

Вы можете либо использовать временные метки (которые являются целыми числами секунд):

// 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");
}
 -1
Author: axiac, 2015-01-29 13:11:17