我有一个脚本,可以从下拉列表中选择未来一整年的日期,所以现在我想在过去一年也这样做,但颠倒它是行不通的。
这是我的代码:
1 Year Ahead
<?php
$day = date('Y-m-d');
$last_day = date('Y-m-d', strtotime($day . '+ 1 year'));
while($day < $last_day) {
echo '<option value="'.$day.'">'.date('jS F Y', strtotime($day)).'</option>';
$day = date('Y-m-d', strtotime($day . ' + 1 day'));
}
?>
1 Year Into The Past
<?php
$day = date('Y-m-d');
$last_day = date('Y-m-d', strtotime($day . '- 1 year'));
while($day < $last_day) {
echo '<option value="'.$day.'">'.date('jS F Y', strtotime($day)).'</option>';
$day = date('Y-m-d', strtotime($day . ' - 1 day'));
}
?>
Furure日期选择器工作正常,但过去的选择器没有显示任何输出。造成这种情况的原因是什么?解决方案是什么?
您应该更改的是在while循环的条件下更改比较器,即以下
while($day < $last_day) {
至
while($day > $last_day) {
原因
由于$day
是今天,而$last_day
是过去一年的日期,($day<$last_day)条件永远不会满足。在每个循环中,从今天开始,将$day变量递减一天。因此,您所需要做的就是渲染选项标记,直到$day变量大于$last_day变量。
您可以使用此
$day = date('Y-m-d', strtotime('-1 year'));
$last_day = date('Y-m-d', strtotime($day . '+ 1 year'));
while($day < $last_day) {
echo '<option value="'.$day.'">'.date('jS F Y', strtotime($day)).'</option>';
$day = date('Y-m-d', strtotime($day . ' + 1 day'));
}
我相信你可以看到我通过在你的起始$day
变量中添加strtotime('-1 year')
来减少起始时间
希望这能帮助
原因是逻辑无效。将$day更改为$today,以便了解原因,并将$last_day更改为$the_day。您可以看到逻辑$today<如果你在寻找过去,那么_日期没有意义,但$the_day<今天有:
<?php
$today = date('Y-m-d');
$the_day = date('Y-m-d', strtotime($today . '- 1 year'));
while($the_day < $today) {
echo '<option value="'.$the_day.'">'.date('jS F Y', strtotime($the_day)).'</option>';
$the_day = date('Y-m-d', strtotime($the_day . ' + 1 day'));
}
?>