Меньше, чем дата г/м/д

#php

Вопрос:

У меня есть удостоверения личности, я пошел проверить, истек ли срок их действия, они в формате y/m/d, поэтому я получаю сегодняшнюю дату в этом формате, и она выходит неправильной.

Как я могу сравнить

2021/03/15

С 2021-12-25

Тире и косые черты, похоже, не имеют значения, поэтому я думаю, что это месяц

Сегодняшняя дата анализируется как дата, другая-строка из массива инструкций SQL

 $utz = new DateTimeZone($_SESSION['timezone']);
$dt = new DateTime(null, $utz);
$today = $dt->format('Y/m/d');

while($myrow = pg_fetch_assoc($result))
        if ($myrow['id1_expiry'] < $today) { 
            printf ("<tr bgcolor=#FD5D5D>.... }else{
 

Комментарии:

1. Что вы пробовали? Пожалуйста, покажите нам вашу попытку.

2. Проанализируйте оба в объекты DateTime, а затем вы сможете легко сравнить, и исходный формат не имеет значения

3. Я попробовал переменные, которые приравниваются к » если 2021-12-25

4. @ADyson могу ли я сделать это для поля массива?

5. Неясно, какую роль в этом играет массив? Это звучало так, как будто у тебя было две струны? Может быть, уточнить с помощью примера кода и образцов данных

Ответ №1:

Вы можете сравнить DateTime объекты с помощью операторов сравнения.

Вы можете использовать сформированную дату для создания нового объекта DateTime в соответствии с принятым форматом.

 $utz = new DateTimeZone($_SESSION['timezone']);
$date = new DateTime(null, $utz);

while ($myrow = pg_fetch_assoc($result)) {
    if (new DateTime($myrow['id1_expiry'], $utz) < $date) { 
        echo 'expired';
    }
}
 

Комментарии:

1. Я попробовал это, и он не находит те, у которых действительно истек срок годности

2. Пожалуйста, проверьте эту демонстрационную версию. Как вы можете видеть, сравнение дат работает так, как и ожидалось. Может быть, у вас проблемы с часовым поясом ?

3. Демонстрация не похожа на мой код, она не показывает мне, как я могу проанализировать 2-е свидание

4. Если дата из базы данных есть 2021-12-25 , new DateTime($sqldate) будет работать.

5. Так что вам не нужно $today = $dt->format('Y/m/d'); , а просто сравните $dt с new DateTime($sqldate) .