PHP,查看日期范围是否部分在另一个日期范围内

use*_*582 6 php date date-range

我一直在寻找这个,但答案似乎无处可去.这是问题所在:

说,我有两个日期范围.

$daterange1 = 2012-04-20 till 2012-04-28 
$daterange2 = 2012-04-18 till 2012-05-01
Run Code Online (Sandbox Code Playgroud)

现在,我想知道daterange2是否在daterange1之内.但是,正如您所看到的,daterange2仅部分位于daterange1内.是否有任何方法可以获得3个变量,例如:

  1. 2012-04-18至2012-04-20
  2. 2012-04-20至2012-04-28
  3. 2012-04-28至2012-05-01

我知道这听起来有点模糊,但我真的不知道如何解释它不同.

rdl*_*rey 7

这是使用PHP DateTime类的示例.请注意,如果将无效的日期字符串传递DateTime::__construct()给函数将抛出异常,那么如果您担心这一点,则应该实现try/catch块.另外,我使用PHP minmax函数,因此指定日期的顺序无关紧要.

$daterange1 = array('2012-04-20', '2012-04-28');
$daterange2 = array('2012-04-18', '2012-05-01');

$range_min = new DateTime(min($daterange1));
$range_max = new DateTime(max($daterange1));

$start = new DateTime(min($daterange2));
$end = new DateTime(max($daterange2));

if ($start >= $range_min && $end <= $range_max) {
  echo 'woot!';
} else {
  echo 'doh!';
}
Run Code Online (Sandbox Code Playgroud)


Lau*_*rke 5

那么,从逻辑上讲,你可以将范围的要求分解为另一个范围.

在以下情况下,范围仅部分在另一范围内:

  • range1的开始日期> range2的开始日期,但不超过range2的结束日期
  • range1的结束日期<than range2的结束日期,但不是<range2的开始日期

如果其中任何一个或两个都为真,那么范围就在彼此之内.