为啥来自 csv 的日期在 php 端显示为数字?

Posted

技术标签:

【中文标题】为啥来自 csv 的日期在 php 端显示为数字?【英文标题】:Why coming dates from csv display as numbers in php side?为什么来自 csv 的日期在 php 端显示为数字? 【发布时间】:2015-04-08 11:38:57 【问题描述】:

好吧,我不知道为什么会这样,但是我在 Excel 中的以下日期字段显示为数字,甚至没有时间戳

我的 excel csv 文件日期字段的屏幕截图。

现在,当我阅读 CSV 日期字段时,将使用 php 在组合框中将此日期显示为以下数字,我不知道为什么它会这样显示,我应该怎么做才能转换回我的 csv 文件日期。 当我执行 data[$k] 读取 csv 文件时,会显示以下日期: 组合框中的 41724 和 41731 等等。怎么办?

我的代码:

while($data = fgetcsv($handle, 1000, ",")) 

        if($row == 10) 

            break;
        
        else  
            if($mycount == 0) 
                $mycount = 1;
                $field_name = $data[$k];
                $tot_combo = $tot_combo + 1;
             else 
                **$user_data[]** = $data[$k]; //where date coming here

            
            $row = $row+1;
        
    

所以在做了更多研究后,我在 csv excel 文件中发现我的日期列被指定为日期,当在 php 中读取文件时,它将该日期列转换为文本,这将返回我 41708 而不是 10/03/2014 任何想法如何实现这一点谢谢

【问题讨论】:

如果你想得到答案,你应该添加一些相关的代码。 检查 Excel 中的格式(右键单击单元格并选择“设置单元格格式”) - 确保它使用适合您尝试导出的日期格式。 csv 文件的 sn-p 也很有用。请记住 csv 文件中没有日期(它的文本!),有以某种格式表示日期的字符串或数字. 感谢尝试通过格式单元格并在 excel 中选择“日期”,但仍然得到 41724 这样的结果:( 我认为它;当我从 csv 文件中提取数据时以文本形式出现,因为如果我将单元格格式化为 csv 日期列到文本,那么它只会给我 5 个数字,我在我的输出中得到在 php.ini 中。所以我在 excel 或 php 方面做什么,如果我从 csv 接收日期然后显示为日期。 【参考方案1】:

因为这个数字是一个 MS Excel 序列化的时间戳,它是 MS Excel 存储日期值的方式,然后使用数字格式掩码将它们呈现为人类可读的日期。

到 PHP DateTime 对象的快速而肮脏的转换:

function ExcelToPHPObject($excelDateTime = 0) 
    $calendarBaseLine = '1899-12-30';
    if ($excelDateTime < 60) 
        // 29th February will be treated as 28th February
        ++$excelDateTime;
    

    return (new \DateTime($calendarBaseLine, new \DateTimeZone('UTC')))
        ->modify('+' . floor($excelDateTime) . ' days')
        ->modify('+' . floor(fmod($excelDateTime, 1) * 86400) . ' seconds');

此函数将返回一个 PHP DateTime 对象(假设 MS Excel Windows 1900 日历),然后您可以使用 DateTime 对象的 format() 方法来格式化您想要的日期/时间,所以:

$excelDateTime = 41724;
echo ExcelToPHPObject($excelDateTime)->format('Y-m-d H:i:s');

【讨论】:

详细说明错误?你希望@Mark 怎么跟进? 我发布的代码有效 - Demo - 如果您遇到错误,请明确说明您从此代码中遇到的错误

以上是关于为啥来自 csv 的日期在 php 端显示为数字?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 CSV 文件不能在我的图表上显示内容?

在Excel里,日期为啥变成了数字

powerbi数字为啥转不了日期

PHP/MySQL:导入 CSV,所有日期和十进制值都为空,零

CSV 文件不断更改使用 php 生成的 CSV 文件上的数字?

php导出csv文件数字会自动变科学计数法的解决方法