Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 两个日期范围之间的交点数_Php_Codeigniter_Date_Range - Fatal编程技术网

Php 两个日期范围之间的交点数

Php 两个日期范围之间的交点数,php,codeigniter,date,range,Php,Codeigniter,Date,Range,我的Codeigniter应用程序中有两个日期范围,我想计算这些日期范围之间相交的天数。有什么想法吗 Date1start=YYYY-MM-DD; Date1end=YYYY-MM-DD Date2start=YYYY-MM-DD; Date2end=YYYY-MM-DD 这样的方法应该行得通 $datetimeStart1 = new DateTime('2015-12-10'); $datetimeEnd1 = new DateTime('2015-12-20'); $datetimeSt

我的Codeigniter应用程序中有两个日期范围,我想计算这些日期范围之间相交的天数。有什么想法吗

Date1start=YYYY-MM-DD; Date1end=YYYY-MM-DD

Date2start=YYYY-MM-DD;
Date2end=YYYY-MM-DD

这样的方法应该行得通

$datetimeStart1 = new DateTime('2015-12-10');
$datetimeEnd1 = new DateTime('2015-12-20');

$datetimeStart2 = new DateTime('2015-12-12');
$datetimeEnd2 = new DateTime('2015-12-28');

// following http://stackoverflow.com/questions/325933/determine-whether-two-date-ranges-overlap
if ($datetimeStart1 < $datetimeEnd2 && $datetimeEnd1 > $datetimeStart2) {
    echo min($datetimeEnd1,$datetimeEnd2)->diff(max($datetimeStart2,$datetimeStart1))->days+1;
} else {
    echo 'no overlap';
}
$datetimeStart1=新日期时间('2015-12-10');
$datetimeEnd1=新日期时间('2015-12-20');
$datetimeStart2=新日期时间('2015-12-12');
$datetimeEnd2=新日期时间('2015-12-28');
//跟随http://stackoverflow.com/questions/325933/determine-whether-two-date-ranges-overlap
如果($datetimeStart1<$datetimeEnd2&&$datetimeEnd1>$datetimeStart2){
echo min($datetimeEnd1,$datetimeEnd2)->diff(max($datetimeStart2,$datetimestar1))->days+1;
}否则{
回声“无重叠”;
}
演示:

仅适用于PHP 5.2

$datetimeStart1 = new DateTime('2015-12-10');
$datetimeStart1 = $datetimeStart1->format('U');
$datetimeEnd1 = new DateTime('2015-12-20');
$datetimeEnd1 = $datetimeEnd1->format('U');

$datetimeStart2 = new DateTime('2015-12-12');
$datetimeStart2 = $datetimeStart2->format('U');
$datetimeEnd2 = new DateTime('2015-12-28');
$datetimeEnd2 = $datetimeEnd2->format('U');

// following http://stackoverflow.com/questions/325933/determine-whether-two-date-ranges-overlap
if ($datetimeStart1 < $datetimeEnd2 && $datetimeEnd1 > $datetimeStart2) {
    echo round(
        ((min($datetimeEnd1,$datetimeEnd2)) - (max($datetimeStart2,$datetimeStart1))) / (60*60*24)) + 1;
} else {
    echo 'no overlap';
}
$datetimeStart1=新日期时间('2015-12-10');
$datetimeStart1=$datetimeStart1->格式('U');
$datetimeEnd1=新日期时间('2015-12-20');
$datetimeEnd1=$datetimeEnd1->格式('U');
$datetimeStart2=新日期时间('2015-12-12');
$datetimeStart2=$datetimeStart2->格式('U');
$datetimeEnd2=新日期时间('2015-12-28');
$datetimeEnd2=$datetimeEnd2->格式('U');
//跟随http://stackoverflow.com/questions/325933/determine-whether-two-date-ranges-overlap
如果($datetimeStart1<$datetimeEnd2&&$datetimeEnd1>$datetimeStart2){
回音(
((最小($datetimeEnd1,$datetimeEnd2))-(最大($datetimeStart2,$datetimeStart1))/(60*60*24))+1;
}否则{
回声“无重叠”;
}
演示:

轻松编写:

$datetimeStart1 = new DateTime('2015-12-10');
$datetimeEnd1 = new DateTime('2015-12-20');

$datetimeStart2 = new DateTime('2015-12-12');
$datetimeEnd2 = new DateTime('2015-12-28');

$start = max($datetimeStart2,$datetimeStart1);
$end = min($datetimeEnd1,$datetimeEnd2);
echo $end >= $start ? $end->diff($start)->days+1 : "no overlap";

“在这些范围之间相交的天数”-你能解释一下这意味着什么吗?你尝试过什么?你能给我们看看你的密码吗@AmalMurali他想知道有多少天属于这两个日期范围。是的,我想找到重叠部分。你应该提供一些示例和你尝试的代码谢谢你的回答,我已经尝试了你的代码并得到了(调用未定义的方法DateTime::diff())错误。你使用的php版本是什么?=<5.2?我已经用PHP5.2可能的解决方法更新了答案。但是你应该完全升级你的php版本。