在PHP EXCEL中读取日期格式

时间:2015-09-17 07:33:55

标签: php excel phpexcel

我已经使用PHP excel读取了excel文件。

但是excel文件包含一些日期(时间格式)PHP excel为该情况返回错误的值

我的代码位于下方

println("i + f = \(Double(i) + f)")  // i + f = 11.34

任何人都可以为此提供帮助.. 在PHPExcel中为这种情况设置一些特定功能..

我的输入excel文件位于下方

2013年12月12日, 2013年12月13日

我的输出在下面

41621, 41631

有一些方法来隐藏日期格式输出数据吗?

4 个答案:

答案 0 :(得分:26)

当您使用PHPExcel_Reader_Excel5 lib读取xls文件时,文件中的数据为39984,但Excel使用日期格式掩码将其格式化为' 2009-06-20'?

Excel将日期作为自1900年1月1日以来的天数(在Windows 1900日历上)。 PHPExcel以相同的方式存储其日期,但不会自动为您格式化它们。

您可以使用PHPExcel_Style_NumberFormat::toFormattedString(39984,PHPExcel_Style_NumberFormat::FORMAT_DATE_DDMMYYYY)
或者PHPExcel_Style_NumberFormat中的任何其他格式掩码自行格式化,或使用 PHPExcel_Shared_Date::ExcelToPHP(39984)然后使用PHP的date()
函数根据需要对其进行格式化

示例:

$val = date('Y-m-d', PHPExcel_Shared_Date::ExcelToPHP($cell->getValue()));

答案 1 :(得分:4)

另一种方法是使用gmdate:

$excel_date = 43010; //here is that value 41621 or 41631
$unix_date = ($excel_date - 25569) * 86400;
$excel_date = 25569 + ($unix_date / 86400);
$unix_date = ($excel_date - 25569) * 86400;
echo gmdate("Y-m-d", $unix_date);

//result is 2017-10-02

答案 2 :(得分:1)

检索必须从Excel时间戳转换为Linux时间戳的日期。 你需要知道的是:

  • Excel表示日期,而Linux则表示
  • Excel从1900年算起,而Linux从1970年开始计算。
  • 所有时间戳都在GM(绿色开关同时)中,因此不应将其转换为gmdate();,而只使用date();

因此,为了将您简单地从Excel转换为Linux,您必须:

  • 删除70年的日期:25569
  • 在一天中乘以秒:86400

这是代码:

function fromExcelToLinux($excel_time) {
    return ($excel_time-25569)*86400;
}

$linux_time = fromExcelToLinux(30637); 
echo date("Y-m-d",$linux_time);
//should print 1983-11-17

那是所有人。

答案 3 :(得分:0)

如果您使用excel_reader进行Excel导入,则可以像这样使用Code。

include('excel_reader/xlsxreader/simplexlsx.class.php');
$xlsx_class = new SimpleXLSX();
$j['IST_Time'] = '43010';
echo date('Y-m-d',$xlsx_class->unixstamp($j['IST_Time'])); // Result will be 2017-10-02

时间

$j['IST_Time'] = '0.416666666667'; 
echo date('h:i A',$xlsx_class->unixstamp($j['IST_Time'])); //10:00 AM

或查看simplexlsx.class.php