сравнивая, если сегодня день рождения

У меня есть пользовательское поле, прикрепленное к пользовательскому сообщению
Настраиваемая запись — это профиль (пользователь), настраиваемое поле даты, сохраняемое как метка времени Unix.

Я оцениваю так:

function born_today_func( $atts ) {
extract(shortcode_atts(array(
'birthday' => get_post_meta(get_the_ID(), 'wpcf-your_cf_slug', true),

), $atts)
);

if((date('d', strtotime($birthday)) == date('d')) && (date('m', strtotime($birthday)) == date('m'))){
return 1;
}else{
return 0;
}
}
add_shortcode( 'born-today', 'born_today_func' );

Неважно, если я использую это как короткий код, как функцию или что-то еще, строку:

if((date('d', strtotime($birthday)) == date('d')) && (date('m', strtotime($birthday)) == date('m')))

Не правильно оценивает дату пользовательского поля с текущей датой.

У меня есть следующие результаты для СЕГОДНЯ:

Профиль 1

12/05/08

человек 2

11/05/08

Человек 3

01/05/15

Но очевидно, что только 12/05 (профиль 1) должны быть отражены.

Стоит отметить, что это НЕ мои единственные профили, но все остальные даты НЕ возвращаются
(как пример 13/05/08 НЕ возвращается)

Что я делаю неправильно?

Как правильно проверить UNIZ TIMESTAMP для дд / мм и вывести ТОЛЬКО, если дд / мм соответствует СЕГОДНЯ?

Я не заинтересован в том, чтобы включить 29 февраля, это совсем другое дело.

Мой код правильный, он оценивает что-то, но не ТОЧНО, что он должен.

Я надеюсь, что кто-то может помочь.

FYI:
Это возвращает ТОЧНЫЕ ЖЕ результаты, как мой код выше:

$birthDate = get_post_meta(get_the_ID(), 'wpcf-birthday', true);
$time = strtotime($birthDate);
if(date('m-d') == date('m-d',$time)) {
return 1;
}else{
return 0;
}

Дополнительная информация, предложенная Люком:

var_dump возвращает:

$ РОЖДЕНИЯ:

string(10) "1210550400" string(10) "1421020800" string(10) "1210464000" string(10) "1430438400"

$ Время:

 int(-49532903345) bool(false) int(64072123846) int(202922721043)

не уверен, что я могу сделать с этим сейчас?

Независимо от всех (безусловно) полезных комментариев и ответов здесь, решение намного проще. просто не конвертируйте.

этот код будет выполнять свою работу, как ожидалось:

function born_today_func( $atts ) {
extract(shortcode_atts(array(
'birthday' => get_post_meta(get_the_ID(), 'wpcf-birthday', true),

), $atts)
);

if(((date('d', $birthday)) == date('d')) && (date('m', $birthday)) == date('m')){
return 1;
}else{
return 0;
}
}
add_shortcode( 'born-today', 'born_today_func' );

1

Решение

Вы должны использовать DateTime::createFromFormat() вместо strtotime разобрать дату. Твое свидание 12/05/08 выглядит неоднозначно.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]