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
发表评论