首页 > 解决方案 > PHP 从 43556 等值中获取月份和年份

问题描述

我在数据库中有一个名为“GROWTH_SALES_MONTHSTART”的字段,其值为 43556。在 PHP 中从中获取月份和年份的正确方法是什么?

strtotime( "43556")bool(false).

编辑:我尝试了以下但日期不正确。

$tt = date( 'M-y', 43556 ) ;
var_dump( $tt );

我应该收到的实际日期是 4 月 19 日,而我收到的是 1 月 70 日。我错过了什么吗?

我正在从 CSV 中提取值 (43556)。

标签: phpstrtotime

解决方案


PHP 的内置strtotime(...)方法需要有效的时间格式并将您的输入视为seconds,关于您尝试转换为 time 的值,我们可以这样说:

  • 您的数字43556 seconds等于725.9小时(除以60
  • 725.9小时等于天30.2
  • 30等于一,也只有一个月。
  • 一年的第一个月是January
  • PHP 时钟的第一年是1970.

这就是为什么您坚持使用Jan-70.


无论如何,如果您的时间是Excel基于的,您可以使用下面的公式从Excel 日期更改为Unix 日期,然后您可以使用 " gmdate(...)" 获取真实日期(如另一个答案):

$EXCEL_DATE = 43556; // Your CSV value goes here
$UNIX_DATE = ($EXCEL_DATE - 25569) * 86400;
echo gmdate("d-M-Y H:i:s", $UNIX_DATE);

输出:

01-Apr-2019 00:00:00

但是,如果你的时间不是Excel基于你应该:

  • 找出您的 CSV 时间所基于的年份和日期。
  • 将其转换为秒(1970应该为零),得到$baseTime.
  • 最后,只需添加$baseTime到您的 CSV 时间值。

例如:

$baseTime = strtotime( 'Tue Dec 15 2009' );
$tt = date( "d-m-Y H:i:s", strtotime( $baseTime + 43556 ) );
var_dump( $tt );

推荐阅读