我很难通过简单的日期检查来正常工作。我搜索了所有问题,到目前为止,没有一个解决方案帮助过我。
我想从特定日期开始循环,直到今天。
以下代码目前正在发生的事情是它不停止并且继续前进。当我登录时,我可以看到日期增加了一天。我也尝试将操作符翻转到<,但这导致循环被完全跳过。
有什么想法吗?
$startOfPlayoffs = new DateTime( "2016-04-29" );
$today = date("Y-m-d");
for($i = $startOfPlayoffs; $i >= $today; $i->modify('+1 day'))
{
//... some stuff
}
有趣的是,当我对日期进行硬编码时,它运行正常。即:
$endOfPlayoffs = new DateTime( "2016-05-02" );
这不太理想,所以希望能让它正常运作。
答案 0 :(得分:2)
您正在将PHP Date对象($ startOfPlayoffs)与字符串($ today)进行比较。尝试将$ today转换为Date对象:
$startOfPlayoffs = new DateTime("2016-04-29");
$today = new DateTime();
$cpt = 0;
for($i = $startOfPlayoffs; $i <= $today; $i->modify('+1 day')){
echo time($i) . "<br>";
if ($cpt++ >= 100) exit;// as a safeguard
}
答案 1 :(得分:1)
使用unix time stamps,它们是更容易处理的具体数字。
int time(void) //current time stamp
您还可以使用strtotime()
转换date strings into time stamps。有关从编号日期格式到unix时间戳的转换,请参阅this question。
答案 2 :(得分:0)
使用DateTime类的->diff()
方法,这样很干净
->diff()
方法生成一个类似于此
DateInterval Object
(
[y] => 0
[m] => 3
[d] => 4
[h] => 17
[i] => 23
[s] => 4
[weekday] => 0
[weekday_behavior] => 0
[first_last_day_of] => 0
[invert] => 0
[days] => 95
[special_type] => 0
[special_amount] => 0
[have_weekday_relative] => 0
[have_special_relative] => 0
)
所以代码可以像这个一样简单
<?php
$startOfPlayoffs = new DateTime( "2016-01-29" );
$today= new DateTime();
$diff = $startOfPlayoffs ->diff($today);
for ( $i = 0; $i<$diff->days; $i++ ) {
// do stuff
}
答案 3 :(得分:0)
使用:date_format($startOfPlayoffs,"Y-m-d")
获取可以与...比较的“变量”
$startOfPlayoffs = new DateTime( "2016-04-29" );
$today = date("Y-m-d");
for($i = date_format($startOfPlayoffs,"Y-m-d"); $i >= $today; $i->modify('+1 day'))
{
//... some stuff
}