【问题标题】:Number of intersections between 2 date ranges2 个日期范围之间的交叉点数
【发布时间】:2015-08-06 23:21:43
【问题描述】:

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

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

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

【问题讨论】:

  • 这些范围之间相交的天数” - 你能解释一下这是什么意思吗?
  • 你试过什么?你能告诉我们你的代码吗? @AmalMurali 他想知道这两个日期范围有多少天。
  • 是的,我想找到重叠部分。
  • 您应该提供一些示例和您尝试过的代码

标签: php codeigniter date range


【解决方案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');

// 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';
}

演示:http://3v4l.org/9Pecb

仅适用于 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';
}

演示:http://3v4l.org/a1WLk

【讨论】:

  • 感谢您的回答,我已经尝试了您的代码并得到了(调用未定义方法 DateTime::diff() )错误。
  • 你用的是什么版本的php? =
  • 我已经用 php 5.2 的可能解决方法更新了答案。但是你应该完全升级你的 php 版本。
【解决方案2】:

写得简单:

$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";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 2020-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多