如何将日期从excel上传到mysql? (使用 php)

Posted

技术标签:

【中文标题】如何将日期从excel上传到mysql? (使用 php)【英文标题】:how to upload date from excel to mysql ? (using php) 【发布时间】:2016-07-11 11:35:05 【问题描述】:

我正在尝试将一些数据从 excel 上传到 mysql 我正在使用 php。当我上传日期为 2015 年 5 月 14 日时,它无法正确上传。它采用这种格式 1970-01-01。我很累在谷歌搜索。

这是我的代码。

if ($ext == 'xlsx' || $ext == 'xls') 
                            try 
                                $inputFileType = PHPExcel_IOFactory::identify($target_path);
                                $objReader = PHPExcel_IOFactory::createReader($inputFileType,'CSV');
                                $objReader->setReadDataOnly(true);
                                $objPHPExcel = $objReader->load($target_path);
                             catch (Exception $e) 
                                die('Error loading file "' . pathinfo($target_path, PATHINFO_BASENAME) . '": ' . $e->getMessage());
                            
                            $sheet = $objPHPExcel->getSheet(0);
                            $highestRow = $sheet->getHighestRow();
                            $highestColumn = $sheet->getHighestColumn();
                        else
                             //In case of CSV
                            if (($handle = fopen($target_path, "r")) !== FALSE) 
                                while (($data = fgetcsv($handle)) !== FALSE) 
                                    $csvData[] = $data;
                                
                                fclose($handle);
                                $highestRow = count($csvData);

                            
                        

                        $rowData = array();
                        for ($row = 2; $row <= $highestRow; $row++) 
                            if ($ext == 'xlsx' || $ext == 'xls') 
                                //  Read a row of data into an array
                                $test = $sheet->rangeToArray('A' . $row . ':' . $highestColumn . $row, NULL, TRUE, FALSE);
                                $rowData[] = $test[0];

                            
                        



                        if ($ext == 'csv') 
                            $rowData = $csvData;
                        
                        $variable = array();
                        $i = 0;
                        $targetArr = array();
                        $error = '';
                        foreach($rowData as $item)
                            if($item[0] !='' && $item[1] !='' && $item[2] !=''):
                                $variable[$i]['Customer'] = array();
                                $variable[$i]['Customer']['msisdn'] = $item[0];
                                $variable[$i]['Customer']['csactivated'] = date('y-m-d',strtotime($item[1]));
                                $variable[$i]['Customer']['csdeactivated'] = date('y-m-d',strtotime($item[2]));
                                //$targetArr[] = $variable;
                                $i++;
                            else:
                                $count =+1;
                                $error .= 'Skip this Row'.$i++.'<br>';
                                continue;
                            endif;
                        

当我导入 excel 时,我得到了像 42104.592743056 这样的日期,虽然它不是我的日期格式............和 ​​mysql 插入像 1970-01-01

【问题讨论】:

你的代码在哪里? 添加一些代码。你试过什么?如果可能的话,一个问题的演示 ***.com/questions/11172644/… 看看这个 【参考方案1】:

当您告诉 PHPExcel 在加载电子表格时忽略任何格式 ($objReader-&gt;setReadDataOnly(true);),例如日期/时间格式,您将只能获得 MS Excel 的内部时间戳值。您需要调用 PHPExcel 的内置函数来手动转换日期值:

要么:

PHPExcel_Shared_Date::ExcelToPHPObject(42104.592743056);

将 MS Excel 日期/时间值转换为 PHP DateTime 对象

PHPExcel_Shared_Date::ExcelToPHP(42104.592743056);

将 MS Excel 值转换为 Unix 时间戳

然后你可以使用适当的 PHP 函数来设置你喜欢的格式


或者,在加载电子表格时不要隐藏格式信息,并告诉rangeToArray() 应用格式

【讨论】:

我实际上不明白我在哪里使用此代码 PHPExcel_Shared_Date::ExcelToPHPObject(42104.592743056); @马克贝克 您在i got date like 42104.592743056 处使用它来将42104.592743056 MS Excel 日期值转换为Unix 时间戳或PHP DateTime 对象,而不是使用strtotime($item[1])

以上是关于如何将日期从excel上传到mysql? (使用 php)的主要内容,如果未能解决你的问题,请参考以下文章

如何从 android 设备上传以编程方式创建的 excel 文件到 PHP 服务器或 MYSQL 数据库

从 MySQL 导入到 Excel 的 CSV 在日期结束时留下“/”

如何使用 PHP 将大型 Excel 文件导入 MySql 数据库

如何确定从 MySQL 导入的日期?

java中如何讲Excel中的数据导入到Mysql

如何使用 phpMyAdmin 将数据从 zip 文件上传到 MySQL 数据库?