как мне сравнить первый объект даты и времени с другим объектом даты и времени в 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 в этом случае сравнивается только день, а не вся дата и время.
5 answers
Строки, возвращаемые из date()
, сопоставимы только при определенных обстоятельствах. Вы должны использовать DateTime()
, объекты которого всегда сопоставимы:
$cdate = new DateTime();
$udate = new DateTime('+3 days');
if($cdate >= $udate) {
}
if(strtotime($cdate) >= strtotime($udate)){
// your condition
}
Надеюсь, это поможет:)
Функция date()
возвращает строку, а не объект DateTime. Таким образом, сравнение >=
, которое вы выполняете, является сравнением строки, а не сравнением дат/времени.
Если вы действительно хотите выполнить сравнение строк, используйте формат, в котором такая сортировка будет иметь смысл, например ISO 8601. Вы можете сделать это тривиально с помощью формата "c".
Однако гораздо лучше было бы сравнить фактические объекты даты и времени или целочисленные временные метки (например, то, что вы получите от time()
).
Ваш код неверен для сравнения дат, потому что дата возвращает строку.
Попробуйте это:
$cdate = new DateTime();
$udate = new DateTime('72 hours');
if($udate > $cdate) {
echo 'something';
}
Вы не сравниваете даты и время, и нет объектов (как в 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");
}