首页 > 解决方案 > 读取 CSV 文件我的日期格式不断变化?

问题描述

我正在阅读一个纯文本 CSV 文件,fgetcsv()并从其中一列中提取日期,如下所示:

$visit_date_title = 'SVDT';
while (($data = fgetcsv($this->handle, 2000, ",")) !== false) {
    $this->row++;

    //Set header columns
    if ($this->row == 1) {
        if(($visit_date_col = $this->get_column_number($data, $visit_date_title)) === false) break;
        $minimum_cols = ($visit_date_col > $minimum_cols) ? $visit_date_col : $minimum_cols;
        continue;
    }

    $this->visitDate = $data[$visit_date_col];

    $this->logprintf(__LINE__, "NOTE  : Received >" . $this->visitDate. "<");
}

我使用以下数据...

SVDT,NOTHING
12/11/2019,0
13/11/2019,0
14/11/2019,0
02/12/2019,0

为什么我会得到不同的日期格式,即使只是阅读文本?!我看到这个...

2019-12-12T14:57:48+00:00 : [line  376] : NOTE  : Received >2019/12/11<   <===
2019-12-12T14:57:48+00:00 : [line  376] : NOTE  : Received >13/11/2019<
2019-12-12T14:57:48+00:00 : [line  376] : NOTE  : Received >14/11/2019<
2019-12-12T14:57:48+00:00 : [line  376] : NOTE  : Received >2019/02/12<   <===

有没有办法避免这种干预并只获取数据?

标签: phpcsv

解决方案


您从CSV文件中获得了实际/正确的日期,所以没有问题。因此,在获取输出并将日期值分配给visitDate变量的最后,您可以格式化标准日期格式,如下所示。希望对你有帮助

 // change date format here

$dateVisited = str_replace("/", "-", $data[$visit_date_col]);

$this->visitDate = date('d/m/Y', strtotime($dateVisited));

$this->logprintf(__LINE__, "NOTE  : Received >" . $this->visitDate. "<");

推荐阅读