У меня есть пользовательское поле, прикрепленное к пользовательскому сообщению
Настраиваемая запись — это профиль (пользователь), настраиваемое поле даты, сохраняемое как метка времени 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' );
Вы должны использовать DateTime::createFromFormat()
вместо strtotime
разобрать дату. Твое свидание 12/05/08
выглядит неоднозначно.
Других решений пока нет …