【问题标题】:Excel import to MySQL: Date inserted as 0000-00-00Excel 导入 MySQL:日期插入为 0000-00-00
【发布时间】:2013-09-24 17:36:56
【问题描述】:

我已使用PHPExcel 库导入 Excel 文件 (.xlsx) 并插入 MySQL。我在使用日期字段时遇到了两个问题:

1- 在 excel 表中,我尝试将日期格式更改为所需的格式。保存后,单元格显示我需要的格式(yyyy/mm/dd),但是当我双击编辑它们时,它们再次变回(mm/dd/yyyy)之前的样子。

2- 当文件通过 PHPExcel 导入 MySQL 时,所有列都正确插入,除了插入 0000-00-00 的日期列。 Excelsheet 中的格式与 MySQL 中的格式相同,但输入的都是零。

请帮忙!

【问题讨论】:

    标签: mysql date phpexcel


    【解决方案1】:

    PHPExcel 中的值存储是 Excel 序列化的日期时间值(一个浮点数,表示自 1900 年 1 月 1 日或 9004 年 1 月 1 日以来的天数,具体取决于使用的是 Windows 还是 Mac 日历)。更改格式只是更改此值的显示方式。

    您要么需要提前知道单元格是否包含日期,要么使用PHPExcel_Shared_Date::isDateTime() 方法对其进行测试,然后进行适当的转换。然后,您可以使用getFormattedValue() 检索它以将值作为格式化字符串返回;或使用内置转换函数将其转换为 unix 时间戳 (PHPExcel_Shared_Date::ExcelToPHP()) 或 PHP DateTime 对象 (PHPExcel_Shared_Date::ExcelToPHPObject()),然后您可以在 MySQL INSERT/ 中使用之前使用标准 PHP 日期格式化函数对其进行格式化更新语句。

    【讨论】:

    • 拍得好。我正在将我的 Excel 表格转换为 CSV,然后阅读这些表格,但我想为了获得准确的日期值,我毕竟必须使用 Excel 库
    【解决方案2】:

    将日期格式更改为yyyy-mm-dd,将文件另存为 CSV 并将其导入数据库。

    【讨论】:

    • 是的。在 Excel 中用于查看的格式与导入方式无关。您需要将excel文件中的实际值更改为yyyy-mm-dd,或者在插入数据库之前自己进行转换。
    • @MikeBrant 这就是问题所在。我将实际值更改为我需要的值并保存。但再次编辑时它又回到了旧版本。
    猜你喜欢
    • 2013-06-09
    • 1970-01-01
    • 2013-01-11
    • 2011-08-30
    • 1970-01-01
    • 1970-01-01
    • 2014-05-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多