使用短代码显示php日期计算

时间:2017-05-04 14:00:22

标签: php wordpress date-arithmetic

尝试在CPT上显示“行业中的XX年”文本。这个想法是客户端将进入工作人员在自定义字段中开始的年份,并且自动计算将从当前年份中减去#并显示。

基本数学是:当前年份 - 输入的开始年份=显示的年份

这几乎正常......但计算不会发生。短代码有​​效,但不是计算。我错过了一个过滤器吗?我可能需要2个函数,一个用于短代码,一个用于计算?

function YearsIndustry_shortcode($metadata, $object_id, $meta_key, $single) {
   $start_year = get_post_meta( $post_id, 'ptb_start_year' );
   $current_year = new DateTime("now");
   $displayed_year = date_diff($current_year, $start_year)->y;
   $Years = $displayed_year. 'Years in Industry';
   return $Years;
}
add_shortcode('YII', 'YearsIndustry_shortcode');

2 个答案:

答案 0 :(得分:0)

1)您应该从post_meta中检索年份:get_post_meta( $post_id, 'ptb_start_year', true),否则您将获得数组,而不是单个值。
2)要计算差异,您应指定特定日期,而不仅仅是开始年份。如果您希望用户只输入年份,假设它是年初(1月1日),您应该在代码中手动添加日期和月份。
3)在 date_diff 功能中,您应该使用 DateTime 对象作为参数。

总结以上所有内容,您的代码应如下所示:

function YearsIndustry_shortcode($metadata, $object_id, $meta_key, $single) {
    $start_year = get_post_meta( $post_id, 'ptb_start_year', true );
    $start_date = new DateTime($start_year."-01-01");
    $current_date = new DateTime("now");
    $displayed_year = date_diff($current_date, $start_date)->y;
    $Years = $displayed_year. 'Years in Industry';
    return $Years;
}

但是如果你不需要计算精确的差异,你可以通过仅减去年数(不推荐)来找到差异:

function YearsIndustry_shortcode($metadata, $object_id, $meta_key, $single) {
    $start_year = get_post_meta( $post_id, 'ptb_start_year', true );
    $current_year = date('Y');
    $displayed_year = $current_year - $start_year;
    $Years = $displayed_year. 'Years in Industry';
    return $Years;
}

答案 1 :(得分:0)

搞定了!!

function YearsIndustry_shortcode() {
   $start_year = get_post_meta( get_the_ID(), 'ptb_start_year', true );
   $current_year = date('Y');
   $displayed_year = $current_year - $start_year;
   $Years = $displayed_year. ' Years in Industry';
   return $Years;
}
add_shortcode('YII', 'YearsIndustry_shortcode');