美好的一天。我使用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)
答案 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(以秒为单位的一天)。
你得到的另一个浮动43195.4092013889
echo date("Y-m-d h:i", (43195.4092013889-25569)*86400); //2018-04-05 11:49 (mind the timezones)
答案 1 :(得分:0)
解决该功能的另一种方法是从对象PHPSpreadSheet获取活动工作表并按如下所示更改样式:
$sheet = $PhpSpreadSheetObject->getActiveSheet();
$sheet->getStyle("A1:Z1")->getNumberFormat()->setFormatCode("YYYY-MM-DD");