日期函数以显示两个日期之间的所有日期

10

是否有一种PHP函数可以显示两个日期之间的所有日期?


2
不是的。这个回答解决了你的问题吗? - Jon
你能添加一个你期望的示例输出吗?此外,你尝试过什么? - Stephan
请查看以下网址:Google.com。第一个链接。 - Viktor S.
可能是重复的问题:PHP:在数组中返回两个日期之间的所有日期 - Viktor S.
你好FAngel:我问有没有内置的PHP函数可以计算? - Kathiravan
请问您为什么要给我的问题点个踩呢? - Kathiravan
3个回答

31

有一个DatePeriod类。

例子:

$begin = new DateTime('2013-02-01');
$end = new DateTime('2013-02-13');

$daterange = new DatePeriod($begin, new DateInterval('P1D'), $end);

foreach($daterange as $date){
    echo $date->format("Y-m-d") . "<br>";
}

(P1D代表一天的时间段,详细文档请参考DateInterval)


2
快了 - 从2017-11-03到2017-11-10的日期显示为03、04、05、06、07、08、09。我们应该排除03或包括10。 - crafter

4
您可以查看此功能。
        $day = 86400; // Day in seconds  
        $format = 'Y-m-d'; // Output format (see PHP date funciton)  
        $sTime = strtotime($start_date); // Start as time  
        $eTime = strtotime($end_date); // End as time  
        $numDays = round(($eTime - $sTime) / $day) + 1;  
        $days = array();  

        for ($d = 0; $d < $numDays; $d++) {  
            $days[] = date($format, ($sTime + ($d * $day)));  
        }  

真棒的东西!! - Pathik Vejani
1
请注意,$ day = 86400; 不总是正确的,当应用夏令时时会有更短或更长的天数。 - Gabriel Reguly
@GabrielReguly 是正确的,86400 是不可靠的。如果你基于每天 86400 秒来构建一个日历,你甚至会得到两个 2018 年 10 月 28 日。 - Marcel
这不考虑闰秒。 - Emil Vikström

1
    $start_date  = '2020/09/01';
    $end_date    = '2020-09-03';

    $new_date = new DateTime($end_date);
    $new_date->add(new DateInterval('P1D'));
    $end_date = $new_date->format('Y-m-d');

    $period = new DatePeriod(
    new DateTime($start_date),
    new DateInterval('P1D'),
    new DateTime($end_date)
   );

   print_r($period);
   foreach ($period as $key => $value) {
     echo $value->format('Y-m-d')  .'<br>';      
   }    

打印:
2020年09月01日
2020年09月02日
2020年09月03日


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接