2016-05-03 102 views
0

我很難得到一個簡單的日期檢查正常工作。我搜索了所有的問題,迄今爲止,沒有任何解決方案對我有所幫助。PHP比較當前日期到給定日期

我想做一個從某個日期到今天的循環。

目前與下面的代碼發生了什麼是它不停止,只是繼續前進。當我登錄我時,我可以看到日期正在增加一天。我也嘗試翻轉運營商到<,但那導致循環被完全跳過。

任何想法?

$startOfPlayoffs = new DateTime("2016-04-29"); 
$today = date("Y-m-d"); 

     for($i = $startOfPlayoffs; $i >= $today; $i->modify('+1 day')) 
     { 
     //... some stuff 
     } 

有趣的是,當我硬編碼的日期,它工作正常。 I.E:

$endOfPlayoffs = new DateTime("2016-05-02"); 

這並不理想,所以希望能夠正常工作。

+0

將'$ today'初始化爲'DateTime'對象。實際上,它只是一個字符串 – WillardSolutions

+0

檢查日期格式是否返回一個字符串,與您的開始日期相比... –

回答

2

您正在比較一個PHP Date對象($ startOfPlayoffs)和一個字符串($ 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 
} 
+0

謝謝,這個工作很好! – John

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 
    } 
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 
    }