phpexcel 匯入日期格式問題

2021-10-01 13:24:48 字數 2881 閱讀 9559

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...