PHP 从 43556 等值中获取月份和年份

PHP get month and year from a value such as 43556

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

strtotime( "43556") 给出 bool(false).

编辑: 我尝试了以下方法,但日期显示不正确。

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

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

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

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

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

这就是为什么您坚持使用 Jan-70 的原因。


无论如何,如果你的时间是基于Excel,你可以使用下面的公式将Excel日期更改为Unix日期,那么你可以使用“gmdate(...)”来获取真实日期(如another answer):

$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 );