AndiMandi
@AndiMandi
Вроде юн, а уже на заводе :)

Ошибка PHP: string-string?

Пытаюсь сделать подсчет возраста исходя из даты рождения человека. Условие такое: если у нас дата рождения не прописана, то оставляем пустое поле, в противном случае мы выводим возраст (то бишь разницу сегодняшнего дня и дня его рождения). И у меня выскакивает ошибка string-string. Не понимаю в чем дело...
<?php $now = date('Y-m-d');
$nothing = '';
$date = get_the_author_meta( '_birthday' ,$user_id); //получает значение в таком же формате, что и переменная $now
$datediff = $now - $date;
?>
<input type="text" name="_age" id="_age" placeholder="Возраст" value="<?php if(empty($date)): echo $nothing; else: echo $datediff; endif; ?>">
  • Вопрос задан
  • 86 просмотров
Решения вопроса 1
wfantastic
@wfantastic
увлечен wordpress
функция содержит несколько ошибок:

Переменная $now содержит только сегодняшнюю дату в формате Y-m-d, а не объект DateTime, который можно использовать для вычисления разницы между датами. Чтобы получить объект DateTime, нужно использовать функцию new DateTime().

Переменная $date содержит строку с датой рождения, которую нужно преобразовать в объект DateTime, прежде чем можно вычислить разницу между датами.

Переменная $datediff содержит результат вычитания двух объектов DateTime, которое возвращает объект DateInterval, а не целочисленное значение разницы в днях между датами.

При выводе значения переменной $datediff в атрибуте value у элемента input используется не тот формат, который требуется для отображения возраста в годах.

вот исправленный код:

$now = new DateTime();
$nothing = '';
$date_str = get_the_author_meta( '_birthday', $user_id ); // получаем дату рождения как строку
if ( empty( $date_str ) ) {
    $age_str = $nothing; // если дата рождения не указана, возвращаем пустую строку
} else {
    $date = new DateTime( $date_str ); // преобразуем дату рождения в объект DateTime
    $diff = $now->diff( $date ); // вычисляем разницу между датами
    $age_str = $diff->y; // получаем количество полных лет
}
?>
<input type="text" name="_age" id="_age" placeholder="Возраст" value="<?php echo $age_str; ?>">
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Stalker_RED
@Stalker_RED
Потому что вы из одной строки пытаетесь вычесть другую.
Ну это примерно как "кузябрики - быбрики = ?" фиг знает какой результат толжен быть.
Можно преобразовать строку в timestamp и оперировать числами.
Еще лучше использовать специальную штуку: DateTime::diff
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы