我正在尝试找出一种编码方法,而无需硬编码编写一些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/>";
}
答案 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";
}
另一种方法是使用范围,让它在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";
}
使用strtotime要快得多 因此,除非你有理由相信它是明天的2038年,否则我认为没有理由使用日期时间。
range method 0.17499923706055
datetime 4.0550231933594
答案 1 :(得分:0)
您可以切换为使用DateTime对象:
<?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";
}