【问题标题】:comparing if today is birthday比较今天是否是生日
【发布时间】:2015-07-24 03:12:57
【问题描述】:

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

第二个人

11/05/08

第三个人

01/05/15

但显然只有 12/05 (Profile 1) 应该被回显。

值得一提的是,这不是我唯一的个人资料,但不会返回所有其他日期 (例如 13/05/08 不返回)

我做错了什么?

如何正确检查 dd/mm 的 UNIZ TIMESTAMP 并仅在 dd/mm 与 TODAY 对应时输出?

我对包括 2 月 29 日不感兴趣,那完全是另一回事。

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

希望有人能帮忙。

仅供参考: 这将返回与我上面的代码完全相同的结果:

$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;
}

Luke 建议的其他信息:

var_dump 返回:

$出生日期:

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

$时间:

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

不确定我现在能用它做什么?

不管这里所有(肯定)有用的 cmets 和答案,解决方案都简单得多。只是不要转换。

此代码将按预期完成工作:

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

【问题讨论】:

  • 相关:stackoverflow.com/questions/3873649/… 。尝试在整个过程中使用var_dump()s 来找出相同/不同的地方?
  • 为什么有两个单独的日期函数而不是 date('md') ?
  • 因为如您所见,它们只是 2 个示例。如果我执行 date(md) 或 date(m) 和 date(d) 两次返回混合结果我会尝试你建议卢克的事情,但我不明白这应该如何解决这个相对奇怪的事情跨度>
  • 卢克,我已经读过那篇文章,但它并没有解决这种情况。事实上,那里的代码根本不起作用
  • var_dump for $birthDate 返回:string(10) "1210550400" string(10) "1421020800" string(10) "1210464000" string(10) "1430438400" 和 $time 的 var_dump 显然相同:` string(10) "1210550400" string(10) "1421020800" string(10) "1210464000" string( 10)“1430438400”`不确定我现在能用它做什么?

标签: php date timestamp evaluate


【解决方案1】:

您应该使用DateTime::createFromFormat() 而不是strtotime 来解析日期。你的日期12/05/08 看起来模棱两可。

【讨论】:

  • 不确定如何使用?由于我不是说英语的人,我也必须在谷歌上搜索“ambiguos”:D
  • 顺便说一句,12/05/08 只是我决定输出的内容。我可以更改它,但是我想要每个短代码属性。问题是,评估 d==d 和 m==m
【解决方案2】:

如果有人正在寻找简单的解决方案,而不是 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';
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-08
    • 2011-01-14
    相关资源
    最近更新 更多