2017-05-24 17 views
2

我可以看到這個問題已經解決好幾次了,我仔細閱讀了所有的主題,但可以找到解決我的問題的方法。PHP foreach總是在空時返回01-01-1970

下面是所返回01-01-1970當空代碼:

$candidateid = '{gprh_fabrik_user_enrollment___id}'; 
    $db = JFactory::getDbo(); 
    $query = $db->getQuery(true); 
    $query ->select (array('gprh_fabrik_user_training_124_repeat.date_exa_2')) ->from('gprh_fabrik_user_enrollment') ->leftJoin('gprh_fabrik_user_enrollment_repeat_choix_formation ON gprh_fabrik_user_enrollment.id = gprh_fabrik_user_enrollment_repeat_choix_formation.parent_id') ->leftJoin('gprh_fabrik_user_training_124_repeat ON gprh_fabrik_user_enrollment_repeat_choix_formation.choix_formation = gprh_fabrik_user_training_124_repeat.id') ->leftJoin('gprh_fabrik_user_training ON gprh_fabrik_user_training_124_repeat.parent_id = gprh_fabrik_user_training.id') ->having('gprh_fabrik_user_enrollment.id = ' .   $db->quote($candidateid)) ->group('gprh_fabrik_user_enrollment.id, gprh_fabrik_user_training_124_repeat.date_exa_2'); 
    $db->setQuery($query); 
    $row = $db->loadObjectList(); 
    foreach ($row as $item) { return date('d-m-Y', strtotime($item->date_exa_2)); }; 

會在這裏得到一些幫助。提前致謝。歡呼聲,馬克

+1

'的strtotime($用品 - > date_exa_2)之前'[被返回false](http://php.net/manual/en/function。 strtotime.php)和'date()'將這個假定爲整數'0'。仔細檢查'$ item-> date_exa_2' – castis

回答

0

這將解決這個問題。你只需要檢查$item->date_exa_2不爲空傳遞給strtotime()

foreach($row as $item) { 
    return (!empty($item->date_exa_2)) ? date('d-m-Y', strtotime($item->date_exa_2)) : ''; 
} 
+0

嗨瑞安感謝您的修復,它像一個魅力和你的代碼是減少,如此完美,謝謝你的時間,歡呼聲,marc PS:托馬斯答案工作也很好 – marcq

+0

你知道這是爲什麼嗎?當一個字段爲空時,strtotime會認爲它的錯誤(零)並且在unix時間戳中等於1-1-1970。 –

-1

日期功能:

日期( '格式', '時間戳');

Timestamp是一個從Unix Epoch開始於1970年1月1日的計數。因此,時間戳僅僅是特定日期和Unix Epoch之間的秒數。

當$ item-> date_exa_2爲空時,strtotime($ item-> date_exa_2)返回0(從Unix Epoch開始0秒),並且日期函數返回01-01-1970。

試試這個

foreach ($row as $item){ 
    $time = strtotime($item->date_exa_2); 
    if($time){ 
     return date('d-m-Y', $time); 
    }else{ 
     return ''; 
    } 
}; 
+0

嗨托馬斯,非常感謝您的答案,這是完美的工作。我選擇Ryan代碼,因爲它減少了。謝謝你的時間,歡呼聲,marc – marcq