2014-10-07 163 views
1

導出後,當我打開CSV時,您會注意到L列格式僅適用於某些日期。這在其他日期列上也是如此。有什麼我可以用PHP來確保所有日期都能正確返回嗎?下面ID我的功能:PHP日期導出爲CSV格式

public function formatDateCI($date) { 

    // If Birthdate Column 
    if(strlen($date) == 10){ 
     $date = explode('-',$date); 
     $m = $date[0]; 
     $d = $date[1]; 
     $Y = $date[2]; 
     $date = $Y.'-'.$m.'-'.$d; 
    } 

    $date = new DateTime($date); 
    // Final Format 1983-24-12 00:00:00 
    return date_format($date, 'Y-d-m H:i:s'); 
} 

Column L Date Format Issue

+0

如何母鹿$ date變量看起來好像它沒有進入If條件? – Gabriel 2014-10-07 14:20:40

+0

'$ date'是來自數據庫的日期時間列嗎? – RiggsFolly 2014-10-07 14:22:18

+0

加布裏埃爾,如果​​它沒有進入if條件它看起來像2014-08-07 21:04:19,裏格斯,數據庫中的brithdate列不是日期時間。其他列是日期時間 – Hector 2014-10-07 14:25:10

回答

2

嘗試:

date('Y-m-d H:i:s', strtotime($date)); 

相反的:

$date = new DateTime($date); 

>

一定要嘗試的,如果else結構:

if(strlen($date) == 10){ 
     $date = explode('-',$date); 
     $M= $date[0]; 
     $D = $date[1]; 
     $Y = $date[2]; 
     //this $date = $Y.'-'.$m.'-'.$d; 
     //or this => 
     $date = date('Y-m-d H:i:s', mktime($h, $m, $s, $M, $D, $Y)); 
    }else{ 
     $date = date('Y-m-d H:i:s', strtotime($date)); 
    } 

    return $date; 
+0

這也有效,但一些生日回來1970-01-01 00:00:00 – Hector 2014-10-07 14:51:42

+0

@Hector你需要有一個統一的日期格式,嘗試一個如果其他結構喜歡看我的編輯 – Gabriel 2014-10-07 14:53:22

+0

明白了通過添加工作,如果其他! – Hector 2014-10-07 14:56:09

0

簡單的解決辦法是做只是這

public function formatDateCI($date) { 
    return date('%Y-%m-%d 00:00:00', strtotime($date)); 
} 

在這種情況下,你可能甚至不需要使它的方法,因爲它會適合很好在調用代碼中。

附加信息

如果您使用的是美國的日期格式,你將不得不修正strtotime()的格式,因爲它預計美國格式的日期有/分隔符,而不是一個-分隔符。如果它看到一個-分隔符,它期望某種邏輯日期格式。

public function formatDateCI($date) { 
    // correct USA date format for strtotime 
    $date = str_replace('-','/',$date); 
    return date('%Y-%m-%d 00:00:00', strtotime($date)); 
} 
+0

調用未定義的函數strtodate() – Hector 2014-10-07 14:43:09

+0

SORRY,我woops,糾正爲'strtotime()'我想我應該我的晚餐沒有品質。 – RiggsFolly 2014-10-07 14:45:37

+0

謝謝,這對所有在DB中的日期時間的列都有效,但現在很多生日日期字段都以1970-01-01 00:00:00返回 – Hector 2014-10-07 14:50:53