如何获取给定日期范围内的一天数

时间:2014-05-26 09:27:28

标签: php date datetime

我有3个不同的日期时间。 $start_date$end_date是我使用的给定日期范围。我需要的是找到这个范围内的$date_from_user,什么不是问题,我找到了很多解决方案,比如this SO answer

但我需要的是告诉$date_from_user在给定日期范围内的确切日期。

从下面的例子中可以看出,预期的结果是5

$start_date = '2009-09-05';

$end_date = '2009-09-17';

$date_from_user = '2009-09-10';

如何从范围中获取当天的天数?

我自己想一个for循环来比较日期,但如果Daterange大于一个月,这将会有问题。

2 个答案:

答案 0 :(得分:2)

$date_from = '2014-5-25';
$date_from = strtotime($date_from);

$date_to = '2014-6-4';
$date_to = strtotime($date_to);

for ($i = $date_from; $i <= $date_to; $i += 86400) {
    $dates[] = date("Y-n-j", $i);
}
return $dates

试试上面的

答案 1 :(得分:1)

您应该使用DateTime classes进行日期计算。它们非常灵活,将考虑DST,时区和闰年。我不知道为什么人们仍在使用strtotime()。

实际上,您需要做的就是在检查用户提供了所需范围内的日期后,计算从范围开始到用户提供日期的天数。

类似于此的功能对您有用: -

function getDayNumberInRange($start, $end, $dayToFind)
{
    $format = 'Y-m-d';
    $startDate = \DateTime::createFromFormat($format, $start);
    $endDate = \DateTime::createFromFormat($format, $end);
    $toFind = \DateTime::createFromFormat($format, $dayToFind);

    if($toFind < $startDate || $toFind > $endDate){
        throw new InvalidArgumentException('The date to find must be between the start and end of the range.');
    }

    return $toFind->diff($startDate)->days;
}

$start_date = '2009-09-05';
$end_date = '2009-09-17';
$date_from_user = '2009-09-10';

echo getDayNumberInRange($start_date, $end_date, $date_from_user); // 5