PhpSpreadsheet正在形成从XLSX导入的日期

时间:2018-05-16 09:08:02

标签: php phpspreadsheet

美好的一天。我使用PhpSpreadsheet的库导入xlsx。

在xlsx的第I列中,我将此值20/10/1970 00:00:00显示为1970-10-20 00:00:00,但在导入时:

$dataArray = $spreadsheet->getActiveSheet()
->rangeToArray(
    'A2:AO3',    // The worksheet range that we want to retrieve
    NULL,        // Value that should be returned for empty cells
    NULL,        // Should formulas be calculated (the equivalent of getCalculatedValue() for each cell)
    TRUE,        // Should values be formatted (the equivalent of getFormattedValue() for each cell)
    TRUE         // Should the array be indexed by cell row and cell column
);

我收到奇怪的["I"] => float(25861)请帮助我在此字段中获取碳数据。

如果我尝试将此浮点数转换为时间戳,则会收到01/01/1970而不是10/20/1970

我收到的其他日期,如["J"] => float(43195.4092014)

2 个答案:

答案 0 :(得分:1)

在Excel中,日期与其他软件/编程语言不同。

Excel从1900-01-01开始计算,与1970-01-01计算的UNIX不同 返回的数字是从1900-01-01开始的天数的浮点值,浮点数的分数是一天中的时间。

例如25861.5是1970-10-20 12:00(“Y-m-d h.i”)。

要转换为UNIX,您应该获取返回值 - 25569(在Excel中为1970-01-01)并乘以86400(以秒为单位的一天)。

见这里: https://3v4l.org/AudMn

在Excel中,如果将25861和25569格式化为日期:
enter image description here

你得到的另一个浮动43195.4092013889

echo date("Y-m-d h:i", (43195.4092013889-25569)*86400); //2018-04-05 11:49 (mind the timezones)

https://3v4l.org/mMZQ4

答案 1 :(得分:0)

解决该功能的另一种方法是从对象PHPSpreadSheet获取活动工作表并按如下所示更改样式:

$sheet = $PhpSpreadSheetObject->getActiveSheet();
$sheet->getStyle("A1:Z1")->getNumberFormat()->setFormatCode("YYYY-MM-DD");