在Wordpress中的ACF中创建两个日期的显示日期范围

时间:2015-07-27 06:12:56

标签: php wordpress date

我在Wordpress中有两个高级自定义字段datepicker字段 - 开始日期和结束日期。这些都在后端,以便我的客户可以添加/编辑帖子并为他们提供日期范围。

以下日期为dd / mm / yyyy(我是澳大利亚人)。

我需要比较两个日期,以便在前端显示一个漂亮的日期范围。它需要:

  1. 检查这两个日期是否相同,在这种情况下它应该只输出一个日期(例如,开始日期是20/7/2015,完成日期是20/7/2015,所以输出是< strong> 2015年7月20日)。

  2. 如果两个日期不同但在同一个月,则输出为dd - dd mm yyyy(例如,开始日期是2015年10月3日,完成日期是2015年5月25日,因此输出 2015年3月10日至25日)。

  3. 如果两个日期在不同月份但同一年,则输出为dd mm - dd mm yyyy(例如,开始日期为2015年4月18日,完成日期为2015年5月5日,因此输出为 2015年4月18日至5月3日)。

  4. 最后,如果两个日期在不同年份,输出为dd mm yyyy - dd mm yyyy(例如,开始日期是2015年11月8日,完成日期是2016年2月2日,因此输出为< strong> 2015年11月8日 - 2016年2月6日)。

  5. 我可以做1和4但缺乏管理2或3的编码技能。

    我很惊讶我无法在SO上找到这个问题,所以如果我忽略了重复,请指出我正确的方向。

    感谢。

2 个答案:

答案 0 :(得分:3)

您可以使用strtotime()函数将日期字符串从元值转换为时间戳,然后您可以使用该时间戳进行比较。然后可以将时间戳传递给date()函数以比较不同的日期部分,并最终格式化返回值。

$start_date = strtotime( '20/7/2015' );
$finish_date = strtotime( '20/8/2015' );

if ( $start_date == $finish_date ){
    // the start and finish are equal "d F Y" #1
    return date( 'd F Y', $start_date );
} else {
    // first check to see if the year is the same since it is a larger scope
    if ( date( 'Y', $start_date ) == date( 'Y', $finish_date ) ){
        // year is the same, check the month next
        if ( date( 'M', $start_date ) == date( 'M', $finish_date ) ){
            // month is the same, use "d - D F Y", #2
            return date( 'd', $start_date ) . ' - ' .  date( 'd F Y', $finish_date );
        } else {
            // month is not the same but year is a match, use "d F - d F Y", #3
            return date( 'd F', $start_date ) . ' - ' .  date( 'd F Y', $finish_date );
        }
    } else {
        // the year is not the same, use "d F Y - d F Y", #4
        return date( 'd F Y', $start_date ) . ' - ' .  date( 'd F Y', $finish_date );
    }
}

答案 1 :(得分:-1)

<?php

$start_date=strtotime('25-5-2010');
$end_date = strtotime('23-7-2012');


if(strcmp($start_date,$end_date)==0){
   $newDate = date('d F Y', ($start_date)); 
    echo $newDate;
}
elseif((strcmp(date('d',$start_date),date('d',$end_date))==0) && (strcmp(date('Y',$start_date),date('Y',$end_date))==0) && (strcmp(date('n',$start_date),date('n',$end_date))!==0)){

        $newDate = date('d', ($start_date)); 
        $newDate2 = date('Y', ($start_date)); 
        echo $newDate.' '.date('F',$start_date).'-'.date('F',$end_date).' '.$newDate2;
}
elseif((strcmp(date('n',$start_date),date('n',$end_date))==0) && (strcmp(date('Y',$start_date),date('Y',$end_date))==0) && (strcmp(date('d',$start_date),date('d',$end_date))!==0)){ 

        $newDate = date('F Y', ($start_date)); 
        echo date('d',$start_date).'-'.date('d',$end_date).' '.$newDate;
}
elseif((strcmp(date('n',$start_date),date('n',$end_date))!==0) && (strcmp(date('Y',$start_date),date('Y',$end_date))==0) && (strcmp(date('d',$start_date),date('d',$end_date))!==0)){ 

        $newDate = date('Y', ($start_date)); 
        echo date('d',$start_date).' '.date('F',$start_date).'-'.date('d',$end_date).' '.date('F',$end_date).' '.$newDate;
}
elseif((strcmp(date('n',$start_date),date('n',$end_date))!==0) && (strcmp(date('Y',$start_date),date('Y',$end_date))!==0) && (strcmp(date('d',$start_date),date('d',$end_date))!==0)){ 

        echo date('d',$start_date).' '.date('F',$start_date).' '.date('Y',$start_date).'-'.date('d',$end_date).' '.date('F',$end_date).' '.date('Y',$end_date);
}
else{
    echo 'Do same as for different case';
}
?>

另请参阅此解决方案

Compare given date with today