我试着用PHP腾出时间。开始日期2017-01-29至2017-12-29。但那次发生的事情我无法在2月打印,因为这个月最多只有28天。如何订购打印,但二月份日期最多为28。
我的剧本:
date_default_timezone_set('UTC');
// Start date
$date = '2017-01-29';
// End date
$end_date = '2017-12-29';
while (strtotime($date) <= strtotime($end_date)) {
echo "$date\n";
echo "<br>";
$date = date ("Y-m-d", strtotime("+1 month", strtotime($date)));
}
输出:
答案 0 :(得分:7)
使用DateTime类查找下个月的最后一天:
date_default_timezone_set('UTC');
// Start date
$date = '2017-01-29';
// End date
$end_date = '2017-12-29';
while (strtotime($date) <= strtotime($end_date)) {
echo "$date\n";
echo "<br>";
$d = new DateTime( $date );
$d->modify( 'last day of next month' );
$date = $d->format( 'Y-m-d' );
}
现在这可能不完全是您感兴趣的内容,因为您可能想要尝试不同的开始日期,并且不要在下个月结束时使用它,或者您可能希望它使用2/28 2月的日期,但是每个月都要回到29日。但这应该让你更接近你需要的逻辑。我认为使用DateTime将是你答案的一部分。
答案 1 :(得分:2)
您可以尝试的其他方法,您不必使用DateTime
。
date_default_timezone_set('UTC');
// Start date
$date = '2017-01-29';
// End date
$end_date = '2017-12-29';
while (strtotime($date) <= strtotime($end_date)) {
echo "$date\n";
echo "<br>";
$date = date("Y-m-t", strtotime("+30 day", strtotime($date)));
}
使用strtotime("+30 day", strtotime($date)
,您可以在当前日期添加30天,并使用t
获取该月的最后一个日期。
2017-01-29
2017-02-28
2017-03-31
2017-04-30
2017-05-31
2017-06-30
2017-07-31
2017-08-31
2017-09-30
2017-10-31
2017-11-30
答案 2 :(得分:1)
使用此
date ("Y-m-t", strtotime("+1 month", strtotime($date)));
而不是这个来获得一个月的最后一天
date ("Y-m-d", strtotime("+1 month", strtotime($date)));
答案 3 :(得分:0)
试试这段代码:
<?php
$from = new DateTime;
$to = new DateTime('+1 year');
for($date=clone $from; $date<$to; $date->modify('+1 day')){
echo $date->format('Y-m-d');
}
?>