PHP将当前日期与给定日期进行比较

时间:2016-05-03 17:09:34

标签: php date

我很难通过简单的日期检查来正常工作。我搜索了所有问题,到目前为止,没有一个解决方案帮助过我。

我想从特定日期开始循环,直到今天。

以下代码目前正在发生的事情是它不停止并且继续前进。当我登录时,我可以看到日期增加了一天。我也尝试将操作符翻转到<,但这导致循环被完全跳过。

有什么想法吗?

$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" );

这不太理想,所以希望能让它正常运作。

4 个答案:

答案 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对象
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
    }