2014-10-07 120 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