简体   繁体   English

列出两个定义之间的所有天数是同一日期 PHP

[英]List all days between two defined is back same date PHP

I have try to list all days between two predefined, when i test on my server i have output like this belowe, as you can see 28.10 is two times there, but when i test this on phptester is back me normal output.我试图列出两个预定义之间的所有日子,当我在我的服务器上测试时,我有如下输出,正如你所看到的 28.10 是那里的两次,但是当我在 phptester 上测试时,我恢复了正常输出。 What can be problem here?这里有什么问题? Where i have make mistake?我哪里出错了?

$from = strtotime('2018-10-25');
$to = strtotime('2018-10-30');
for ($i=$from; $i<=$to; $i+=86400)
    {
         $list[] = date('Y-m-d', $i);
    }
echo '<pre>';
print_r($list);
echo '</pre>';

Output输出

Array
(
    [0] => 2018-10-25
    [1] => 2018-10-26
    [2] => 2018-10-27
    [3] => 2018-10-28
    [4] => 2018-10-28
    [5] => 2018-10-29
)

I suspect you are running into the end of daylight savings time, when the clock gets set back an hour. 我怀疑您的时钟已经推迟了一个小时,您的夏令时即将结束。 So adding 24 hours worth of seconds on that day leaves you on the same day. 因此,当天增加24小时的秒数可让您在同一天。

It's better to adjust time by days for example using the DateTime class: 最好按天调整时间,例如使用DateTime类:

$start = new DateTime('2018-10-25');
$end = new DateTime('2018-10-29');
while ($start <= $end) {
    $list[] = $start->format('Y-m-d');
    $start->modify('+1 day');
}
print_r($list);

Output 产量

Array
(
    [0] => 2018-10-25
    [1] => 2018-10-26
    [2] => 2018-10-27
    [3] => 2018-10-28
    [4] => 2018-10-29
)

Demo on 3v4l.org 3v4l.org上的演示

   $from = strtotime('2018-10-25');
   $to = strtotime('2018-10-30');
   $list = [];
   for ($i=$from; $i<=$to; $i+=86400)
   {
      if(!in_array(date('Y-m-d', $i), $list))
         $list[] = date('Y-m-d', $i);
   }
   echo '<pre>';
   print_r($list);
   echo '</pre>';
   ?>

Try in_array this helps. 尝试使用in_array会有所帮助。 I checked 我检查了

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM