如果我有两个日期范围(例如5月1日 - 5月31日和5月23日 - 6月5日),那么最好的方法是找出这两个时期在PHP中重叠的天数(因此会返回9)?有没有办法使用DatePeriod对象?
编辑(希望)澄清我的问题:
基本上我想要一个函数,给定任何两个日期范围,它将返回两个日期范围之间共同的天数。如果有重叠,它将返回重叠天数,否则它将返回0.我认为这可以通过为每个范围创建一个日期数组,循环遍历它们以查找相同的日期,并使用变量来计算比赛的数量 - 但我正在寻找更优雅的东西。
答案 0 :(得分:26)
感谢@ phpisuber01和Determine Whether Two Date Ranges Overlap提供基本逻辑。这四个变量需要是DateTime对象:
function datesOverlap($start_one,$end_one,$start_two,$end_two) {
if($start_one <= $end_two && $end_one >= $start_two) { //If the dates overlap
return min($end_one,$end_two)->diff(max($start_two,$start_one))->days + 1; //return how many days overlap
}
return 0; //Return 0 if there is no overlap
}
答案 1 :(得分:2)
没有任何真实的信息以此为基础。以下是如何使用DateTime
对象计算天数差异的基本示例。
$datetime1 = new DateTime('2013-05-23');
$datetime2 = new DateTime('2013-05-31');
$interval = $datetime1->diff($datetime2);
echo $interval->format('%R%a days'); //returns 8 days
我假设您知道如何将字符串转换为可用的时间戳/格式。