2017-09-22 50 views
0

我做了接收到一个完整的工作表类,减少信息量,和答案另一个工作表,在工作表中,有一个领域,其中有可能是负的时间(-H :1),功能:写有PHPExcel负时间 - XLS

$file ['AH42'] = '-0:21'; 

$hdE = \PHPExcel_Style_NumberFormat::toFormattedString($file['AH42'], 'HH:i')); 

给我回:

$ hdE = '23: 39',当它应该返回'-0:21'

我该怎么做?

让PHPexcel返回负时间而不00:00

+0

使用'-hh:mm'作为格式掩码....但不要混淆与PHP的日期格式口罩MS Excel的日期格式口罩 –

+0

但每当你问像'让PHPexcel返回负时间不计算从00:00',总是问你如何在MS Excel中先做... [微软在这里提供了几个解决方案](https://support.microsoft.com/en-au/help/182247/negative -date-and-time-value-are-displayed-as-pound-signs-in-excel) –

+0

在Excel中,我使用格式[H]:MM Time,此字段表示时间不足以完成某个时间段,那么它可能是正面的或者可能是负面的,这取决于剩下多少小时或剩余多少小时(PS:它在LibreOffice中)。 – AnthraxisBR

回答

1

计算也许减号移动到格式字符串?

$file ['AH42'] = '0:21' 
$hdE = \PHPExcel_Style_NumberFormat::toFormattedString($file['AH42'], '-HH:i')); 
+0

这可以工作,但是这个字段可以是负面的,因为它也可以是积极的,我无法控制我要修改的电子表格 – AnthraxisBR

-1

不要使用PHPExcel_Style_NumberFormat

PHPExcel V1.6 PHPExcel_Style_NumberFormat::toFormattedString功能呢,是叫sprintf([predefinedFormat], $value),或返回的date()结果。预定义的格式都不能处理负面时间。此外,您给出的格式参数-HH:i不是该函数的接受列表,因此它只返回该值。

PHPExcel V1.8确实允许格式化选项的高度复杂的自定义数字,但仍日期或时间不处理底片。

参见:PHPExcel github为V1.8和cmsws phpexcel docs为V1.6

只是自己格式化

注意,你不能只是调用date作为该函数的作用,如PHP date()不支持负时间戳。所以你必须手动计算标志。

$time = $file['AH42']; 
$hdE = ($time < 0) ? '-' : ''; 
$hdE = date('H:i', (1 * abs($time))); 

虽然这在技术上意味着你在1970年1月1日上时元时间戳操作,时间依然准确(这就是Excel中是如何工作的)。