【问题标题】:not getting date properly from the xls sheet没有从 xls 表中正确获取日期
【发布时间】:2013-05-10 12:51:20
【问题描述】:

我正在使用 ubuntu 进行编码。

我正在将 xls 文件数据导入到我的控制器中,其中一个字段是日期,我已将单元格格式化为日期格式,当我查看导入的数据时一切正常,但日期字段显示为号码,

例如:输入的日期是2013-05-10 它显示为39942

然后检查我已通过保持日期值原样将单元格的格式更改为数字的内容,然后它向我显示了一个值39942,这与我进入控制器的值相同。 .! 导入后如何获取正确的日期,

对此有何帮助..?

【问题讨论】:

    标签: php xls


    【解决方案1】:

    Excel 将日期/时间存储为序列化浮点时间戳、自 1900 年 1 月 1 日(或 1904 年 1 月 1 日,具体取决于 Windows 或 Mac 日历)以来的天数,并记住它将 1900 年视为闰年。

    直接取自 PHPExcel 日期处理代码:

    public static function ExcelToPHP($dateValue = 0) {
        if (self::$ExcelBaseDate == self::CALENDAR_WINDOWS_1900) {
            $myExcelBaseDate = 25569;
            //    Adjust for the spurious 29-Feb-1900 (Day 60)
            if ($dateValue < 60) {
                --$myExcelBaseDate;
            }
        } else {
            $myExcelBaseDate = 24107;
        }
    
        // Perform conversion
        if ($dateValue >= 1) {
            $utcDays = $dateValue - $myExcelBaseDate;
            $returnValue = round($utcDays * 86400);
            if (($returnValue <= PHP_INT_MAX) && ($returnValue >= -PHP_INT_MAX)) {
                $returnValue = (integer) $returnValue;
            }
        } else {
            $hours = round($dateValue * 24);
            $mins = round($dateValue * 1440) - round($hours * 60);
            $secs = round($dateValue * 86400) - round($hours * 3600) - round($mins * 60);
            $returnValue = (integer) gmmktime($hours, $mins, $secs);
        }
    
        // Return
        return $returnValue;
    }    //    function ExcelToPHP()
    

    根据需要设置 self::$ExcelBaseDate == self::CALENDAR_WINDOWS_1900 以指示您正在使用的 Excel 基准日历:Windows 1900 或 Mac 1904

    如果你想要一个 PHP DateTime 对象:

    public static function ExcelToPHPObject($dateValue = 0) {
        $dateTime = self::ExcelToPHP($dateValue);
        $days = floor($dateTime / 86400);
        $time = round((($dateTime / 86400) - $days) * 86400);
        $hours = round($time / 3600);
        $minutes = round($time / 60) - ($hours * 60);
        $seconds = round($time) - ($hours * 3600) - ($minutes * 60);
    
        $dateObj = date_create('1-Jan-1970+'.$days.' days');
        $dateObj->setTime($hours,$minutes,$seconds);
    
        return $dateObj;
    }    //    function ExcelToPHPObject()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-18
      • 1970-01-01
      • 1970-01-01
      • 2013-03-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多