Excel日期数值44824转正常日期时PHP代码转换结果不符求助
问题排查及解决
核心问题分析
你用gmdate("Y-m-d", ($arr['excelDatas'][0]['date_hired'] - 25569) * 86400)转换得到的结果是正确的——Excel数值44824本身对应的日期就是2022-09-20,和你所说的原Excel显示的2022/08/08不符,说明问题出在Excel读取或数据库插入环节,而非转换代码。
具体原因及验证
- Excel日期本质是数值:在Windows默认的1900日期系统下,
2022/08/08对应的正确数值是44793,而非44824。你可以在Excel中输入44793并设置单元格格式为日期,会显示2022/08/08;输入44824则会显示2022/09/20。 - 可能的出错点:
- 读取Excel时误读了其他单元格数值,或使用的读取工具未正确识别日期格式(比如把带公式的单元格值当成原始日期值)。
- Excel单元格的显示格式与实际存储值不符:比如单元格设置了自定义日期格式,或用公式强制显示为
2022/08/08,但实际存储的是44824。
解决步骤
- 打开原Excel文件,选中显示
2022/08/08的单元格,查看编辑栏的实际值:如果编辑栏显示44824,说明单元格是用格式或公式伪装的日期,需修正原始数据;如果编辑栏显示2022/08/08,切换到数值格式查看实际数值是否为44793。 - 检查PHP读取Excel的代码:确认使用的读取库(如PhpSpreadsheet)是否正确解析日期格式,是否开启了日期自动转换配置,避免将日期当作纯数值读取。
- 验证数据库插入前的数值:在插入数据库前打印
$arr['excelDatas'][0]['date_hired']的值,确认是否为44793,若不是则说明读取环节已出错。
内容的提问来源于stack exchange,提问作者Michael Angelo Corral
相关产品推荐
相关产品推荐

