php导入exl时间处理

文章描述:

在php导入exl数据到数据库的时候,会发现时间不正确,这时需要写一个时间处理函数来处理时间格式,确保时间导入到数据库是正确的。

准备文件

phpexcel版本:PHPExcel-1.8.zip

网址:https://github.com/PHPOffice/PHPExcel

1、下载PHPExcel,解压到文件目录,命名为PHPExcel,PHPExcel里面文件目录文件如下:

Classes
Documentation
Examples
.gitattributes
.gitignore
.travis.yml
changelog.txt
composer.json
install.txt
license.md

2、新建一个index.php文件引入exl类

define('ROOT_PATH',str_replace('\\','/',realpath(dirname(__FILE__).'/'))."/");
require ROOT_PATH.'PHPExcel/Classes/PHPExcel/IOFactory.php'; //引入读取excel的类文件';

3、定义需要打开的exl文件和载入文件

$filename = ROOT_PATH.'hello.xlsx';
$objPHPExcel = PHPExcel_IOFactory::load($filename); //加载文件

exl文件里面的时间格式如下:

 

4、获取exl的总行数和总列数

$sheet = $objPHPExcel->getSheet(0);
$highestRow = $sheet->getHighestRow();//取得总行数
$highestColumn = $sheet->getHighestColumn(); //取得总列数

5、指定获取exl列里面的内容,然后输出内容。

for ($i = 1; $i <= $highestRow; $i++) {
    $date =$objPHPExcel->getActiveSheet()->getCell("A" . $i)->getValue();
    echo $date;
    echo "<br/>";
}

运行结果:

日期
43831
43850
43862
43890
43891
43910
44113
44114
44136
44195

会发现不是想要的时间格式,这时需要加一个时间处理函数

6、新建一个时间格式处理函数

function excelTime($date, $time = false) {
    if(function_exists('GregorianToJD')){
        if (is_numeric( $date )) {
            $jd = GregorianToJD( 1, 1, 1970 );
            $gregorian = JDToGregorian( $jd + intval ( $date ) - 25569 );
            $date = explode( '/', $gregorian );
            $date_str = str_pad( $date [2], 4, '0', STR_PAD_LEFT )
                ."-". str_pad( $date [0], 2, '0', STR_PAD_LEFT )
                ."-". str_pad( $date [1], 2, '0', STR_PAD_LEFT )
                . ($time ? " 00:00:00" : '');
            return $date_str;
        }
    }else{
        $date=$date>25568?$date+1:25569;
        /*There was a bug if Converting date before 1-1-1970 (tstamp 0)*/
        $ofs=(70 * 365 + 17+2) * 86400;
        $date = date("Y-m-d",($date * 86400) - $ofs).($time ? " 00:00:00" : '');
    }
    return $date;
}

然后在获取时间的外面调用这个函数

excelTime($objPHPExcel->getActiveSheet()->getCell("A" . $i)->getValue());

刷新页面会发现得到的结果是:

日期
2020-01-01
2020-01-20
2020-02-01
2020-02-29
2020-03-01
2020-03-20
2020-10-09
2020-10-10
2020-11-01
2020-12-30

发布时间:2021/06/22

发表评论