Сравнение фактической даты с другой датой - PullRequest
0 голосов
/ 03 октября 2018

У меня есть

$fecha_actual = strtotime('now');
$fechaactual = date("d/m/Y",$fecha_actual); 
$fechatope = $fila1['fechatope'];

if($fechatope < $fechaactual) {
      echo "Fecha Actual: $fechaactual y Fecha Tope: $fechatope ";
}

Результат, который я получаю:

Fecha Actual: 03/10/2018 y Fecha Tope: 03/02/2019

Зачем вводить if, если $fechatope больше $fechaactual?Я не понимаю ...

Ответы [ 7 ]

0 голосов
/ 03 октября 2018

Это связано с тем, что в приведенном вами примере ваш Fecha Tope меньше вашего фактического Fecha.

ПОЧЕМУ?

Из-за вашего формата даты.Представьте, что PHP-код определяет, является ли одна дата больше или меньше другой.Это делается путем вычисления его как целое число.

Итак, давайте преобразуем наши даты в целые числа:

Fecha Actual = 03102018 
Fecha Tope = 03022019

Теперь, когда ваша дата отформатирована как день, месяц, год - не имеет большого значения, если есть разница в году, потому чтоэто будет самая маленькая единица в нашем целочисленном значении.Принимая во внимание, что разница в дне приведет к самым большим изменениям в единицах.

Если вы реорганизуете свой код и с этого времени используете «Ymd», тогда вы избежите этой проблемы при сравнении дат.

0 голосов
/ 03 октября 2018

Поскольку date () возвращает строку, вам придется ее отформатировать.Вам также нужно будет соблюдать программные стандарты времени, а не YMD, а не стандарты вашей страны.

Если вы выбираете другую дату (ту, с которой вы сравниваете ее) из базы данных, выпридется также форматировать эту строку по времени, используя функцию strtotime () .

Пример:

$dateExample=date('d/m/Y'); // your date() string

$format = "d/m/Y"; // current string format to change.
$timedate = DateTime::createFromFormat($format, $dateExample); //creates the format and changes the string to a dateTime object.
$dateExample = $timedate->format('Y-m-d'); //perform the format, changing the standard to Y-m-d format.

$anotherDateFromDataBase = $row['dateColumn']; //date variable fetched from the database
$anotherDateFromDataBase = strtotime($anotherDateFromDataBase); //converts the string to time

Теперь вы можете сравнить две даты.

if($anotherDateFromDataBase < $dateExample) {
    //do something
}
0 голосов
/ 03 октября 2018

Если у вас есть строка 03/02/2019 и вы хотите сравнить ее с текущим временем:

$fechaactual = new DateTime();                                   // current date and time
$fechatope = DateTime::createFromFormat("m/d/Y|", "03/02/2019"); // 2019-03-02 00:00:00

var_dump($fechaactual < $fechatope);  // true
var_dump($fechaactual == $fechatope); // false (warning: dont use ===)
var_dump($fechaactual > $fechatope);  // false

Это решение выглядит гораздо более сложным, чем другие, но оно наиболее универсально.Это не оставляет никакой двусмысленности, если вы знаете формат даты (ей).

0 голосов
/ 03 октября 2018

date () возвращает строку.Итак, вы сравниваете, если строка меньше другой строки (я предполагаю тип второго параметра, поскольку мы его не видим).

Существует много специальных правил, когда речь идет о сравнении строк.с <</strong> и > в PHP.Он будет сравнивать строки в алфавитном порядке.Если строка начинается с числа, которое это число будет использовать при сравнении и т. Д.

Независимо от того, что это, скорее всего, не того, что вы ожидаете.

ЛибоВы можете превратить оба раза в временные метки, которые являются как числовыми, так и сравнимыми, как в вашем коде.Или вы можете превратить строки в объекты DateTime и использовать функцию DateTime :: diff или логические операторы, такие как <</strong>, > и == для сравнения дат.

0 голосов
/ 03 октября 2018

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

$fecha_actual = strtotime('now');
$fechaactual = date("d/m/Y",$fecha_actual); 
$fechatope = date("d/m/Y",strtotime($fila1['fechatope']));
if($fechatope < $fechaactual) {
  echo "Fecha Actual: $fechaactual y Fecha Tope: $fechatope ";
}
0 голосов
/ 03 октября 2018

В PHP функция date возвращает строку.Итак, ваша переменная $fechaactual это строка

"03/10/2018"

Теперь я предполагаю, что ваша переменная $fechatope это строка

"03/02/2019"

Если вы выполняете сравнение строк, $fechaactual больше!

Именно поэтому большинство программистов в наши дни не используют форматы даты, специфичные для страны.Если вы собираетесь сравнивать строки, используйте формат даты international , ISO 8601, а не формат конкретной страны.ISO 8601 позволяет сортировать по строкам, потому что это ГГГГ-ММ-ДД.Форматы первого дня или первого месяца плохо подходят для программирования.(Конец разглагольствования! :))

Кроме того, вы можете сравнивать сами объекты даты или сокращать каждую дату до времени эпохи.

Даты жесткие.

0 голосов
/ 03 октября 2018

Попробуйте сравнить их с

strtotime($fechatope) < strtotime($fechaactual)

Таким образом, он просто сравнивает целые числа, уменьшая вероятность ошибок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...