【问题标题】:Using PHPExcel to import contents of excel file into MySQL database (format problems)使用PHPExcel将excel文件内容导入MySQL数据库(格式问题)
【发布时间】:2011-07-21 08:18:18
【问题描述】:

我将 Excel 2007 文件的内容导入 MySQL 数据库,但电子表格中的日期字段是自定义日期格式 (dd-mmm-yy)。我无法将其更改为文本,因为客户端将上传它,所以这是不可行的。当我导入文件的内容时,它将日期作为数字插入,例如40978 而不是 09 年 1 月 12 日。我知道更改该字段的数据库表格式将没有任何效果,因为它的 excels formatitng 但有人知道解决这个问题的方法吗?不改变电子表格的格式?

【问题讨论】:

    标签: php mysql date format phpexcel


    【解决方案1】:

    使用 PHPExcel 的内置转换方法,如 PHPExcel_Shared_Date::ExcelToPHP() 或 PHPExcel_Shared_Date::ExcelToPHPObject() 将日期值分别转换为 PHP/Unix 时间戳或 PHP DateTime 对象。

    然后您可以使用适当的 PHP date() 或 $DateTimeObject->format() 函数将其格式化为 yyyy-mm-dd 格式字符串。

    编辑

    $excelDateValue = 40978;
    
    $PHPTimeStamp = PHPExcel_Shared_Date::ExcelToPHP($excelDateValue);
    echo $PHPTimeStamp,'<br />';
    echo date('Y-m-d',$PHPTimeStamp),'<br />';
    

    $excelDateValue = 40978;
    
    $PHPDateTimeObject = PHPExcel_Shared_Date::ExcelToPHPObject($excelDateValue);
    echo $PHPDateTimeObject->format('Y-m-d'),'<br />';
    

    顺便提一下,40978 的 Excel 日期戳是 2012 年 3 月 10 日(基于 Excel Windows 1900 日历)或 2016 年 3 月 11 日(基于 Excel Mac 1904 日历)。 2009 年 1 月 12 日是 Excel 时间戳 39825(基于 Excel Windows 1900 日历)。

    【讨论】:

    • echo $PHPDateTimeObject->format('Y-m-d'),'
      ';这就是我所缺少的 :-) @Mark Ba​​ker
    【解决方案2】:

    使用代码 thar 将字符串日期转换为 mysql 格式的日期。比如:

    $ma=array("jan"=>"-01-","feb"=>"-02-","mar"=>"-03-", etc );
    $month=$ma[strtolower(substr($exceldate,3,3))];
    $newdate="20".substr($exceldate,7,2).$month.substr($exceldate,0,2);
    

    【讨论】:

    • 它将所有日期转换为 2040 年? @mlewis54
    • 我认为这是因为 40978 是在导入 mysql 之前返回的数字所以我需要从这个数字开始工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-11
    • 1970-01-01
    • 1970-01-01
    • 2013-04-23
    • 2013-04-26
    • 1970-01-01
    相关资源
    最近更新 更多