PHP date() 到 Excel 串行格式转换

Posted

技术标签:

【中文标题】PHP date() 到 Excel 串行格式转换【英文标题】:PHP date() to Excel serial format conversion 【发布时间】:2019-04-18 10:59:13 【问题描述】:

我已经找了好几个小时了。我到处都能看到如何将 Excel 序列号转换为 UNIX_Date 的示例。

我想要做的是一个 php 日期("Y-m-d H:i:s") 将其转换为 Excel 序列号。

例子:

$php_date = date("Y-m-d H:i:s"); // "2019-04-18 11:57:25" at the time

如果我在 Excel 单元格中输入“2019-04-18 11:57:25”,并将其格式化为显示数字,则 Excel 会显示“43573.4982060185” 如何在 PHP 中得到这个“43573.4982060185”?

编辑: 根据摩根在下面的回答,我现在有一个功能可以做到这一点: 编辑2: 添加了时区设置以获取我的本地时间,如果其他人需要此设置,请设置为您的本地时区。 PHP 支持的时区列表可以在这里找到https://www.php.net/manual/en/timezones.php

function PHP_to_Excel() 
date_default_timezone_set("Europe/London");
$datetime = date("Y-m-d H:i:s");    
$strdate = strtotime($datetime);    
$excel_date = floatval(25569 + ($strdate / 86400));

return $excel_date;

上述函数将返回当前本地日期和时间的正确序列号。

【问题讨论】:

Here 你会看到excel是如何计算序列日期的 【参考方案1】:

这里:

<?php

date_default_timezone_set('America/New_York');
$date_time = date("Y-m-d H:i:s");
$str_date = strtotime($date_time . ' +1 day');
$excel_date = floatval(25569 + $str_date / 86400);
var_dump($excel_date);

你应该用你的当前更改时区,你可以看到所有时区here

返回:

float(43573.46537037)

【讨论】:

你非常接近,我也尝试过类似的方法,但没有 floatval()。但在你现在的情况下,如果我在 excel 中输入该值,excel 会显示大约一小时的差异。有没有办法解决这种行为?或解释为什么会这样? Xmm,我不确定,让我检查一下 正好是一小时吗?如果是,手动加一小时怎么样? 嗯,我想到了这一点,但我不确定相同的代码是否会在夏季/冬季给我正确的时间。这可能与此有关。但我想我现在不能检查

以上是关于PHP date() 到 Excel 串行格式转换的主要内容,如果未能解决你的问题,请参考以下文章

php时间格式怎么转换?

关于json编码时间格式的转换

ORACLE时间格式转换问题

php的对象串行化

JS日期格式的转换

Js 怎么把UTC时间到转换到当地时间