@stevieg8

Как посчитать разницу между датами без года в PHP?

Здравствуйте, помогите пожалуйста решить задачу.
У меня есть даты рождения пользователей, вбитые через ACF.
Как вывожу?
$bday = get_field('День рождения', $user);
Выводится в полном формате, например 15.06.2022
Мне нужно:
1. эту дату сократить до дня и месяца, чтобы было 15.06
2. взять текущую дату в таком же формате и посчитать между ними разницу в днях, чтобы увидеть, что например между 15.06 и текущей датой 08.06 - 7 дней.
Между полными датами с помощью date_diff получается все посчитать
$bday = get_field('День рождения', $user);
$today = date();
$today1= new DateTime($today);
$bday1= new DateTime($bday);
$interval = $bday1->diff($today1);
echo $interval->format('%R%a дней');

Но вот правильно срезать до формата день-месяц и посчитать тоже само не получается. Спасибо.
  • Вопрос задан
  • 224 просмотра
Решения вопроса 1
@Siverius
$currentYear = date("Y");
$currentDate = new DateTime();

$bday = get_field('Birthday', $user); // maybe it is like '06-08'
$bday = new DateTime($currentYear . '-' . $bday);

if ($bday <= $currentDate) {
    $interval = $bday->diff($currentDate);
    echo $interval->format('%R%a дней');
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
@Vitsliputsli
А как вы собираетесь считать дни между датами, без указания года? Или вы забыли, что есть високосные года?
Укажите текущий год для дня рождения, и сравните с текущей датой. Если результат отрицательный, то берите следующий год для дня рождения.
Ответ написан
Комментировать
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Но вот правильно срезать до формата день-месяц и посчитать тоже само не получается.
Естественно, даты они такие... Особенно интересно все будет выглядеть в вашем варианте где-то в районе декабря, когда дата дня рождения окажется вообще меньше текущей на год, а по факту еще остается пару дней.

Между полными датами с помощью date_diff получается все посчитать
Что логично, единственное что не понятно - зачем считать обрезанные даты?
Ответ написан
@stevieg8 Автор вопроса
В принципе, как перебрать даты рождений людей и сравнить с текущей датой - понятно.
<?php 
                $blogusers = get_users([
                    'login__not_in' => ['stevieg8'],
                    'orderby'       => 'registered',
                ]);
                foreach ( $blogusers as $user ) {
                    $date = date('d.m.Y');
                    $bday = get_field('День рождения', $user);
                    if ($bday === $date) {
                        echo $user->user_lastname;
                    }
                }
            ?>


Но работает, само собой, только если дата рождения пользователя полностью совпадает с текущей. Вот поставил человеку год рождения 2022 и всё ок.
Ответ написан
Ваш ответ на вопрос

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

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