2011-07-27 79 views
4

Excel的日期格式我相信是自1899年12月30日以來的天數。(爲什麼?因爲它基於1/1/1900,但它錯誤地包含了1900年的閏日,並且它是基於一個的。在1900年的頭幾個月罰款,但後來出錯了。在Excel中1/1/1901是「367」。)將PHP日期轉換爲Excel?

那麼,我該如何將日期或時間戳從PHP(通常存儲爲Unix時間戳,自1/1/1970以來的秒數)到Excel?

在PHP 5.1.6中?

是的,打賭你沒有看到有人來。所以我沒有任何DateTime對象,date_create(),date_diff()等功能可用。

如果沒有簡單地記錄1970年1月1日的Excel日期並且從那裏開始工作,甚至有可能嗎?並且有防DST版嗎?

+0

我不假設你用來寫入Excel文件的任何附加的轉換函數嗎?如果這只是CSV,我發現Excel在解析基本日期/時間格式方面非常出色。 – Brad

+0

我正在使用PHPExcel,它的內置函數根據PHP 5.2轉換日期。 95%的PHPExcel在5.1中工作,但不是日期轉換。我正在製作一個實際的Excel文件,當我只是發送日期字符串「07/27/2011」時,它似乎並不認爲它是日期,所以操作和排序都是關閉的。 – Andrew

+0

我不認爲升級到5.2或更高版本是一種選擇嗎? – Brad

回答

9

如果我沒有記錯的話,有86400秒的一天,25569天1899年12月和01一月至1970年期間30的,爲了將Unix時間戳到Excel日期,配方

ExcelDate = 25569 + UnixTS/86400

應該工作。當然,這個公式只適用於UTC。 (另外,它忽略閏秒。)對於其他時區,如果您知道UTC的偏移量(以秒爲單位!),則可以在使用上述公式之前將其添加到時間戳中。

+0

我想現在可以工作了。我懷疑夏令時將會如何 - 它會以合適的方式進行。 (如果結果是480.04天或479.96天,那麼它仍然會達到480 ...) – Andrew

+0

即使我放入#天,格式化代碼仍然需要5.2。好吧。 – Andrew