#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
всегда устанавливается так, как оно назначено непосредственно выше.
Надеюсь, это поможет,