使用codeigniter在CSV文件中以奇怪的方式出现日期格式

Posted

技术标签:

【中文标题】使用codeigniter在CSV文件中以奇怪的方式出现日期格式【英文标题】:Date format coming in weird way in CSV file using codeigniter 【发布时间】:2017-01-24 14:12:38 【问题描述】:

我有一个 codeigniter 函数来为数据库中的用户数据创建一个 CSV 文件。

我的功能是这样的:-

function user_CSV()

    $filename = 'CSV_User_Report.csv';      
    $this->load->dbutil();      
    $this->load->helper('file');        
    $this->load->helper('download');        
    $delimiter = ",";        
    $newline = "\r\n";  
    $queryUser = "SELECT user_name AS Name, 
                    user_username AS Username, 
                    user_mobile AS Mobile, 
                    DATE_FORMAT( user_added_date, '%d-%m-%Y' ) AS `Joining Date`,
                    DATE_FORMAT( user_last_activity, '%d-%m-%Y' ) AS `Last Acitivity`
                FROM tbl_user"; 
    $dataResult = $this->db->query($queryUser);
    if($dataResult->num_rows()>0)       
       
        $data = $this->dbutil->csv_from_result($dataResult, $delimiter, $newline);      
       
    if(force_download($filename, $data))        
               
        redirect('admin/user');     
    

现在,这个正在创建 CSV 文件。但是有一个严重的问题。为了说明这一点,我分享了 CSV 的屏幕截图。

如您所见,有些加入日期采用 dd/m/YYYY 格式,有些采用 dd-mm-YYYY 格式。

但是,当我试图在 phpmyadmin 中查看查询时,我得到的结果如下:-

为什么 CSV 数据的日期格式显示如此不一致? 我做错了什么?

【问题讨论】:

有没有可能只是 Excel 显示问题?如果你格式化这些单元格以正确显示日期会发生什么,如果你在文本编辑器、记事本或记事本++中打开文件,日期在 csv 中的外观如何? 【参考方案1】:

在没有真正查看您的代码的情况下,我有根据的猜测是,您的电子表格软件假定日期采用美国格式 (MM-DD-YYYY),因此它做了两件事:

如果 day 小于等于 12,则会误读日期并交换日期和月份 如果 day 大于 13,则认为它不是有效日期并显示为字符串

CSV 是一种非常松散的格式,不提供任何格式化日期的标准方法。但是我建议像 YYYY-MM-DD 这样的东西。

【讨论】:

是的,你是对的。这是由于软件遵循的美式格式。我提出的解决方案是以'%d-%M-%Y' 格式获取日期。这解决了问题。

以上是关于使用codeigniter在CSV文件中以奇怪的方式出现日期格式的主要内容,如果未能解决你的问题,请参考以下文章

从 Codeigniter 导出 CSV 文件

在 Codeigniter 中上传 CSV 文件时出错

如何使用 codeigniter 导入 CSV 文件并将数据插入到多个表中?

如何使用codeigniter将csv文件导入mysql

在 pyspark 中以 csv 格式读取 excel 文件

在 .NET 核心中以原子方式下载 CSV 文件