здесь я использую один объект даты и времени это
$cdate = date('d/m/Y h:i:sa')
и еще один объект даты и времени это
$udate = date("d/m/Y h:i:sa", strtotime("72 hours"));
для сравнения я использую это условие
if($cdate >= $udate)
но проблема в этом … в этом случае это единственный сравниваемый только день, а не вся дата и время.
Строки, возвращенные из 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».
Однако гораздо лучше было бы сравнить фактические объекты DateTime или целочисленные метки (например, то, что вы получите от 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");
}