将PHP日期转换为Excel?

5

我认为,Excel的日期格式是自1899年12月30日以来的天数。(为什么?因为它基于1900年1月1日,但在1900年错误地包含了一个闰年,且从1开始计算。所以在1900年的前几个月没问题,但之后就有误。Excel中的1901年1月1日是“367”)

那么,如何将PHP中的日期或时间戳(通常存储为Unix时间戳,即自1970年1月1日以来的秒数)转换为Excel?

在PHP 5.1.6中?

是的,你可能没有想到。所以我没有任何可用的DateTime对象、date_create()、date_diff()等函数。

如果不记录1970年1月1日的Excel日期并从那里开始工作,是否仍然可能实现这个目标?并且是否有一种不受夏令时影响的版本?


我不确定你用来编写Excel文件的工具是否附带任何转换函数?如果这只是CSV格式,我发现Excel在解析基本日期/时间格式方面非常出色。 - Brad
我正在使用PHPExcel和其内置函数将日期转换为PHP 5.2。 PHPExcel的95%在5.1中工作,但不包括日期转换。我正在创建一个实际的Excel文件,当我只发送日期字符串“07/27/2011”时,它似乎无法将其识别为日期,因此操作和排序出现问题。 - Andrew
升级到5.2或更高版本不是一个选项吗? - Brad
如果我能的话,相信我我会的。这个在去年我的圣诞愿望清单上,可能今年也会在。 - Andrew
太棒了,你制作了[php5.1]! - daGrevis
1个回答

10
如果我没记错的话,一天有86400秒,在1899年12月30日和1970年1月1日之间有25569天。因此,要将Unix时间戳转换为Excel日期,使用以下公式:

ExcelDate = 25569 + UnixTS / 86400

当然,这个公式只适用于协调世界时(UTC)。(另外,它忽略了闰秒。)对于其他时区,如果你知道与UTC的偏移量(以秒为单位),则可以在使用上述公式之前将其添加到时间戳中。

现在这个应该可以用,我想。而且我怀疑夏令时不会有影响——它会按正确的方式四舍五入。 (如果它最终是480.04天,或479.96天,那仍然会四舍五入到480...) - Andrew
结果发现即使我输入了天数,格式化代码仍然需要5.2。 哎呀。 - Andrew

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接