比较今天是否过生日

时间:2015-05-13 02:19:50

标签: php date timestamp evaluate

我有一个自定义字段,附加到自定义帖子 自定义帖子是自定义字段的配置文件(用户)日期,存储为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

我做错了什么?

如果dd / mm与TODAY相对应,如何正确检查UNIZ TIMESTAMP的dd / mm并输出?

我对2月29日没有兴趣,这是另一件事。

我的代码是正确的,它评估的是SOMETHING,但不是它应该是什么。

我希望有人可以提供帮助。

供参考: 这将返回EXACT SAME结果作为上面的代码:

$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返回:

$ birthDate:

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' );

2 个答案:

答案 0 :(得分:0)

您应该使用DateTime::createFromFormat()代替strtotime来解析日期。您的约会12/05/08看起来很模糊。

答案 1 :(得分:0)

如果某人正在寻找简单的解决方案,而不是针对wordpress,则会弹出帖子

$birthday = new DateTime("05-28-2020");
$today = new DateTime(date("Y-m-d"));

if ($birthday->format("m-d") == $today->format("m-d")) {
 echo 'Today is your birthday';
} else {
 echo 'Today is not your birthday';
}