使用PHP Excel进行Excel日期转换

Abd*_*sit 22 php import-from-excel

我正在使用此代码阅读来自excel的日期,该格式为12/5/2012日/月/年.使用PHP EXCEL

   PHPExcel_Style_NumberFormat::toFormattedString($value['A'],'YYYY-MM-DD' );
Run Code Online (Sandbox Code Playgroud)

它的工作就像将上述日期'12/5/2012'转换为'2012-12-05'

现在的问题是如果日期是让我们说18/5/2012或者你可以说如果我设置的日期大于12它会给我这个日期18/5/2012以这种格式18/5/2012格式化后

我也试过这个东西

      $temp  = strtotime(  PHPExcel_Style_NumberFormat::toFormattedString($value['A'],'YYYY-MM-DD' );
      $actualdate = date('Y-m-d',$temp) ;
Run Code Online (Sandbox Code Playgroud)

这也正在转换日期'12/5/2012'正确但在这种情况下18/5/2012它输出为1970-01-01

小智 71

请使用此公式从Excel日期更改为Unix日期,然后您可以使用"gmdate"来获取PHP中的实际日期:

UNIX_DATE = (EXCEL_DATE - 25569) * 86400
Run Code Online (Sandbox Code Playgroud)

要从Unix日期转换为Excel日期,请使用以下公式:

EXCEL_DATE = 25569 + (UNIX_DATE / 86400)
Run Code Online (Sandbox Code Playgroud)

将此公式放入变量后,您可以使用此示例在PHP中获取实际日期:

$UNIX_DATE = ($EXCEL_DATE - 25569) * 86400;
echo gmdate("d-m-Y H:i:s", $UNIX_DATE);
Run Code Online (Sandbox Code Playgroud)

  • 我可以.86400是一天中的秒数= 24*60*60. 25569是从1900年1月1日到1970年1月1日的天数.Excel基准日期是1900年1月1日,Unix是1970年1月1日. UNIX日期值从1970年1月1日(1969年12月31日午夜)开始,以秒为单位.因此,要从excel转换,您必须减去天数然后转换为秒. (7认同)
  • 完美的。但是你能解释一下 25569 和 86400 的意义吗? (2认同)
  • 哦,我需要这么糟糕无法弄清楚到底是什么类型的excel给了我. (2认同)

cap*_*ica 23

使用PHPExcel时,您可以使用内置函数:

$excelDate = $cell->getValue(); // gives you a number like 44444, which is days since 1900
$stringDate = \PHPExcel_Style_NumberFormat::toFormattedString($excelDate, 'YYYY-MM-DD');
Run Code Online (Sandbox Code Playgroud)


Sea*_*anC 0

您的变量似乎是一个字符串,或者需要美国格式的日期。
使用 'DateTime::createFromFormat' 将日期转换为实际的日期格式

$date = DateTime::createFromFormat('d/m/y', $value['A']);
echo $date->format('Y-m-d');
Run Code Online (Sandbox Code Playgroud)