Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP日期导出为CSV格式_Php_Datetime_Csv_Export To Csv_Date Formatting - Fatal编程技术网

PHP日期导出为CSV格式

PHP日期导出为CSV格式,php,datetime,csv,export-to-csv,date-formatting,Php,Datetime,Csv,Export To Csv,Date Formatting,导出后,当我打开CSV时,您会注意到L列只正确地格式化了部分日期。这也发生在其他几个日期栏上。我能用PHP做些什么来确保正确返回所有日期吗?下面是我的功能: public function formatDateCI($date) { // If Birthdate Column if(strlen($date) == 10){ $date = explode('-',$date); $m = $date[0]; $d = $dat

导出后,当我打开CSV时,您会注意到L列只正确地格式化了部分日期。这也发生在其他几个日期栏上。我能用PHP做些什么来确保正确返回所有日期吗?下面是我的功能:

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');
}

简单的解决办法就是这样做

public function formatDateCI($date) {
    return date('%Y-%m-%d 00:00:00', strtotime($date));
}
在这种情况下,您可能甚至不需要将其作为方法,因为它将很好地适合调用代码

其他信息

如果您使用的是美式日期格式,则必须更正
strotime()
的格式,因为它希望美式日期具有
/
分隔符,而不是
-
分隔符。如果它看到一个
-
分隔符,它需要某种逻辑日期格式

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

而不是:

$date = new DateTime($date);
>

请确保尝试if-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;

如果$date变量没有输入if条件,它会是什么样子?它是来自数据库的datetime列吗?Gabriel,如果它没有输入if条件,它看起来像2014-08-07 21:04:19,Riggs,数据库中的brithdate列不是datetime。其他列是DateTime,但我仍然在其他列DateTime上看到相同的问题,这是否意味着
生日
日期
对未定义函数strotate()的列调用对不起,我的woops,更正为
strotime()
我想我不应该在晚餐时喝那一品脱。谢谢,这适用于数据库中的所有datetime列,但现在许多birthdate字段返回为1970-01-01 00:00:00。birthdate列中到底有什么内容,请举例说明哪里出错?如果
birthdate
是可选字段,即用户是否可以将其留空?如果是,您的数据库为该列设置的默认值是多少。这也起作用,但有些生日返回为1970-01-01 00:00:00@Hector你需要有一个统一的日期格式,尝试一个if-else结构,如see-my-edit
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;