如何在给定的日期范围内得到一天的数字


How to get the number of a day in given daterange

我有3个不同的日期时间。$start_date$end_date是我处理的给定日期范围。我需要的是找到$date_from_user在这个范围内,什么不是问题,我找到了很多解决方案,像这样的答案。

但是我需要的是告诉$date_from_user在给定Daterange中的确切日期。

因此,从下面的例子中,预期的结果将是5

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

如何从范围中获取日期?

我自己想到了一个for循环来比较日期,但如果Daterange大于一个月,那将是有问题的。

$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

试试上面的

您应该使用DateTime类进行日期计算。它们非常灵活,可以考虑夏令时、时区和闰年。我不明白为什么人们还在使用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