php使用phpexcel匯入excel時,如果某列使用的是excel的日期時間格式,比如2019/12/18 20:00:00,如果資料庫儲存的是時間戳,而在匯入時直接使用了strtotime(),則匯入的時間是不正確的,而且是空的,因為讀取出來根本不是乙個時間戳,而是類似43817.833333333這樣的資料,需要轉一下,這裡有個公式:
echo gmdate('y-m-d h:i:s', (43817.833333333 - 25569) * 3600 * 24);
之所以用gmdate,因為excel是使用的格林威治時間。
如果是存時間戳:
$thetime = strtotime(gmdate('y-m-d h:i:s', $thetime))
網上大部分到這一步就完了,我就被坑過,還是比如2019/12/18 20:00:00這個時間,轉為時間戳後匯入資料庫,在從資料庫讀取出來轉為時間,結果卻是2019-12-18 19:59:59,但同樣的方式,在其他時間上卻是正確的,比如:2019-12-18 19:00:00;
我們把這2個時間輸出來看看
$thetime = ($data[5] - 25569) * 3600 * 24;
echo $data[5] - 25569 . '
';echo $thetime . '
';echo gmdate('y-m-d h:i:s', $thetime) . '
';echo strtotime(gmdate('y-m-d h:i:s', $thetime)) . '
';echo '--------------------------
';
$data[5]是從excel讀取資料
2019-12-18 19:00:00和2019-12-18 19:59:59的輸出如下
18248.791666667
1576695600
2019-12-18 19:00:00
1576666800
--------------------------
43817.833333333
18248.833333333
1576699200
2019-12-18 19:59:59
1576670399
,在細分下,採用普通計算和高進度計算看看結果:
$thetime = ($data[5] - 25569) * 3600 * 24;
echo $data[5] - 25569 . '
';echo bcsub($data[5], 25569, 9) . '
';echo ($data[5] - 25569) * 86400 . '
';echo bcmul(($data[5] - 25569), 86400, 9) . '
';echo $thetime . '
';echo gmdate('y-m-d h:i:s', $thetime) . '
';echo strtotime(gmdate('y-m-d h:i:s', $thetime)) . '
';echo '--------------------------
';
結果如下
18248.791666667
18248.791666667
1576695600
1576695600.000028800
1576695600
2019-12-18 19:00:00
1576666800
--------------------------
18248.833333333
18248.833333333
1576699200
1576699199.999971200
1576699200
2019-12-18 19:59:59
1576670399
相信看到這個結果,就應該知道問題在**了,如果使用四捨五入計算:
$thetime = round(($data[5] - 25569) * 3600 * 24);
echo $data[5] - 25569 . '
';echo bcsub($data[5], 25569, 9) . '
';echo ($data[5] - 25569) * 86400 . '
';echo bcmul(($data[5] - 25569), 86400, 9) . '
';echo round($thetime) . '
';echo gmdate('y-m-d h:i:s', $thetime) . '
';echo strtotime(gmdate('y-m-d h:i:s', $thetime)) . '
';echo '--------------------------
';
結果如下
18248.791666667
18248.791666667
1576695600
1576695600.000028800
1576695600
2019-12-18 19:00:00
1576666800
--------------------------
18248.833333333
18248.833333333
1576699200
1576699199.999971200
1576699200
2019-12-18 20:00:00
1576670400
php excel匯出 匯入問題 csv格式
之前做電商,涉及到很多資料需要匯出來,提交給其他部門處理,資料肯定需要匯出,都是通過phpexcel第三方庫完成的,今天發現乙個很簡單的方法同樣可以完成相同的工作,匯出csv格式的文件,這種文件內部使用逗號 來資料分割,換行符 n 分行分割,每一行最後面都有乙個 n 每一行資料中的每2個資料之間乙個...
phpexcel 匯入匯出常見格式問題
excel匯入,日期2017 5 2便變成了數值,對應值62857 在php中,echo date y m d h i s 62857 結果1970 01 02 01 27 37 原因 php 的時間函式是從1970 1 1日開始計算的,單位是秒數。但是 excel的是從1900 1 1日開始算的單...
phpexcel 匯入匯出
匯出excel 以下是使用示例,對於以 開頭的行是不同的可選方式,請根據實際需要 開啟對應行的注釋。如果使用 excel5 輸出的內容應該是gbk編碼。require once phpexcel.php uncomment require once phpexcel writer excel5.ph...