2016-11-25 90 views
1

我有進入一個循環,用戶指定的日期。日期將始終來自格式化爲'Y-m-d'字符串的數據庫。我知道我可以直接比較字符串,只要它們是這種格式,但是,我也嘗試使用strtotime來轉換日期以比較它們,但沒有運氣。我想,以確定用戶有多少片酬已收到付款是由於添加到日期while循環

這裏是我有什麼

$due_date = '2016-12-13'; 

    //count paychecks set to zero and added to by loop 
    $paychecks = 0; 

    //users next paycheck ('Y-m-d' ALWAYS) 
    $next_payday = $user['next_payday']; //equal to '2016-12-02' 

    //how often they get paid (int) 
    $frequency = 14; 

    while(strtotime($next_payday) <= strtotime($due_date)){ 

     //next_payday equals 1480654800 when coming into the loop 
     //due_date equals 1481605200 when coming into the loop 

     //add 14 days to the date 
     $next_payday = date('Y-m-d', strtotime("+" .$frequency." days"));; 

     //add to paychecks 
     $paychecks++; 
    } 

的問題是,循環永遠不會停止。它不斷前進。

感謝所有幫助任何人都可以給我。

回答

1

啊,一定要使用的strtotime得到整數(代表自epoch的秒數)進行比較,並在一天內乘你的日子的頻率通過的秒數(86400):

$due_date = strtotime('2016-12-25'); 

//count paychecks set to zero and added to by loop 
$paychecks = 0; 

//users next paycheck (unixtime for comparison) 
$next_payday = strtotime($user['next_payday']); 

//how often they get paid (int) 
$frequency = 14; 

while($next_payday <= $due_date){ 

    //add 14 days to the date 
    $next_payday += ($frequency * 86400); 

    //add to paychecks 
    $paychecks++; 
} 
+0

我已經更新了我的代碼。該循環不斷使用的strtotime將日期轉換爲int在while語句時繼續偶數。我認爲它與當前日期 – kevin3954

+1

增加了14天的混淆,你是否更新了最新的問題? – WEBjuju

+0

我錯過了//添加14日到日期 $ next_payday + =($ frequency * 86400) – kevin3954