как установить правильно сформированное числовое значение

#php

#php

Вопрос:

Я пытаюсь найти разницу между двумя датами (одна — дата регистрации пользователя, а другая — текущая дата). Когда текущая дата будет больше одного дня с даты регистрации, появится сообщение «Вы можете сдать кровь». Но он показывает ошибку «обнаружено неверно сформированное числовое значение». поскольку я новичок, это большая проблема для меня. ожидаю вашей помощи. заранее спасибо.

вот мой код

  <?php 

                   $date= Session::get("donation_date");
                   if (isset($date)) {
                        $today= time();
                        $difference=($date- $date) > 1;
                        echo ' '.$difference.' you are capable to donate blood';
                   }


              ?>
  

Ответ №1:

С одной стороны, вы используете время Unix, а с другой — строку.
Время Unix — это счетчик отправлений, который имеет значение в виде целого числа.
Дата (я предполагаю) что-то вроде 2019-03-17, строка.

Вы можете использовать strtotime для преобразования даты в Unix, таким образом, у вас есть два целых числа, которые можно вычесть.
Результатом является разница в секундах, что означает, что 86400 — это день (без учета летнего времени).

 $date= Session::get("donation_date");
if (isset($date)) {
    $today = time();
    $difference = $today - strtotime($date);
    if ($difference > 864000) echo ' '.$difference.' you are capable to donate blood';
}
  

Редактировать: чтобы strtotime мог анализировать дату, она должна быть в формате, поддающемся анализу.
http://php.net/manual/en/datetime.formats.php
Если это не так, то просто скажите так, и я помогу вам проанализировать дату.

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

1. @MimHsan нет проблем! Но имейте в виду, что код будет отличаться в летние дни -1 час. Но я предполагаю, что это не совсем так, когда люди могут сдавать кровь. Не стесняйтесь принять ответ, который вам помог.

2. Извините, я думал, что это работает. Но, к сожалению, это не работает.

3. Хорошо .. вы можете быть более конкретными?

4. перед его отображением вы можете сдать кровь. но сейчас такого сообщения нет. и ошибки нет. после входа в систему такого сообщения нет

5. Я не могу отладить ваш код. Вы должны мне помочь. Каковы значения переменных?

Ответ №2:

Похоже, у вас опечатка:

 $difference=($date-$date) > 1;
  

должно быть:

 $difference=($today-$date) > 1;
  

Кроме того, вероятно, было бы лучше убедиться, что $date имеет правильный формат, обновить:

 if (isset($date)) {...}
  

Для:

 if (is_numeric($date)) {...}
  

as $date всегда устанавливается так, как оно назначено непосредственно выше.
Надеюсь, это поможет,