我在Wordpress中有两个高级自定义字段datepicker字段 - 开始日期和结束日期。这些都在后端,以便我的客户可以添加/编辑帖子并为他们提供日期范围。
以下日期为dd / mm / yyyy(我是澳大利亚人)。
我需要比较两个日期,以便在前端显示一个漂亮的日期范围。它需要:
检查这两个日期是否相同,在这种情况下它应该只输出一个日期(例如,开始日期是20/7/2015,完成日期是20/7/2015,所以输出是< strong> 2015年7月20日)。
如果两个日期不同但在同一个月,则输出为dd - dd mm yyyy(例如,开始日期是2015年10月3日,完成日期是2015年5月25日,因此输出 2015年3月10日至25日)。
如果两个日期在不同月份但同一年,则输出为dd mm - dd mm yyyy(例如,开始日期为2015年4月18日,完成日期为2015年5月5日,因此输出为 2015年4月18日至5月3日)。
最后,如果两个日期在不同年份,输出为dd mm yyyy - dd mm yyyy(例如,开始日期是2015年11月8日,完成日期是2016年2月2日,因此输出为< strong> 2015年11月8日 - 2016年2月6日)。
我可以做1和4但缺乏管理2或3的编码技能。
我很惊讶我无法在SO上找到这个问题,所以如果我忽略了重复,请指出我正确的方向。
感谢。
答案 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';
}
?>
另请参阅此解决方案