PHP列出了每天的日期,从今天的日期开始,到下个月的第15天结束

时间:2018-05-18 18:12:13

标签: php

我正在尝试找出一种编码方法,而无需硬编码编写一些PHP代码以列出每天日期的天数,从今天的日期开始到下个月的第15天结束(格式:2015年1月1日星期四)。

这是我的解决方案,但正如您所见,我已经对天数进行了硬编码

    //days until 15th for example
    $day = "25";

    $date = date("l jS  F Y");

    for($i=0; $i < $day; $i++ )
    {
      echo date("l jS  F Y", strtotime($date. ' + '.$i.' days'));
      echo "<br/>";
    }

3 个答案:

答案 0 :(得分:0)

您可以使用while循环将日期与下个月的15日进行比较,并在每次迭代时计算一天。

$date = date("l jS  F Y");
$end = strtotime(date("Y-m-15"). "+1 month");
echo $date . " <br/> \n";
While(strtotime($date)<$end)
{
  $date = date("l jS  F Y", strtotime($date. ' +1 days'));
  echo $date . " <br/> \n";
}

https://3v4l.org/G38Xc


另一种方法是使用范围,让它在Unix时间内构建一个包含所有日期的数组,然后预测它以回显值。

$range = range(time(), strtotime(date("Y-m-15"). "+1 month"), (3600*24));

Foreach($range as $val){
    echo date("l jS  F Y", $val) . "\n";
}

https://3v4l.org/dj0nD

使用strtotime要快得多 因此,除非你有理由相信它是明天的2038年,否则我认为没有理由使用日期时间。

https://3v4l.org/3CMQL

range method 0.17499923706055
datetime 4.0550231933594

答案 1 :(得分:0)

您可以切换为使用DateTime对象:

https://3v4l.org/5WWev

<?php

// 15th 
$countUntilDay = 15;
$currentDate = new DateTime();
$date = clone $currentDate;
while(true) {
    echo $date->format('l jS F Y') . "\n";

    if((int)$date->format('d') === $countUntilDay && (int)$date->format('n') === (int)$currentDate->format('n') + 1) {
        break;
    }

    $date->modify('+1 day');
}

答案 2 :(得分:0)

您可以通过在固定格式化日期strtotime(date("Y-m-15")中添加1个月来执行此操作,它将为您提供该月的15th天。然后,您可以在"+1 month"中添加一个月,然后比较并正常打印日期。

$curDate = date("l jS  F Y");
$ending = strtotime(date("Y-m-15"). "+1 month");
echo $curDate . " <br/> \n";
While(strtotime($curDate) < $ending){
  $date = date("l jS  F Y", strtotime($curDate. ' +1 days'));
  echo $curDate . " <br/> \n";
}