我有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大于一个月,这将会有问题。
答案 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