From 5a7c2c1262ed683067c4ee074da104af658eddc7 Mon Sep 17 00:00:00 2001 From: Adrien Loison Date: Thu, 19 May 2016 09:40:12 -0700 Subject: [PATCH] Handle General number format as non date (#221) If the number format is set to General (id = 0), do no try to format the value as a date --- src/Spout/Reader/XLSX/Helper/StyleHelper.php | 16 ++++++++++++++-- .../Spout/Reader/XLSX/Helper/StyleHelperTest.php | 10 ++++++++++ 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/Spout/Reader/XLSX/Helper/StyleHelper.php b/src/Spout/Reader/XLSX/Helper/StyleHelper.php index 403d647..19014b5 100644 --- a/src/Spout/Reader/XLSX/Helper/StyleHelper.php +++ b/src/Spout/Reader/XLSX/Helper/StyleHelper.php @@ -171,11 +171,23 @@ class StyleHelper protected function doesNumFmtIdIndicateDate($numFmtId) { return ( - $this->isNumFmtIdBuiltInDateFormat($numFmtId) || - $this->isNumFmtIdCustomDateFormat($numFmtId) + !$this->doesNumFmtIdIndicateGeneralFormat($numFmtId) && + ( + $this->isNumFmtIdBuiltInDateFormat($numFmtId) || + $this->isNumFmtIdCustomDateFormat($numFmtId) + ) ); } + /** + * @param int $numFmtId + * @return bool Whether the number format ID indicates the "General" format (0 by convention) + */ + protected function doesNumFmtIdIndicateGeneralFormat($numFmtId) + { + return ($numFmtId === 0); + } + /** * @param int $numFmtId * @return bool Whether the number format ID indicates that the number is a timestamp diff --git a/tests/Spout/Reader/XLSX/Helper/StyleHelperTest.php b/tests/Spout/Reader/XLSX/Helper/StyleHelperTest.php index 3b8edff..57e8acb 100644 --- a/tests/Spout/Reader/XLSX/Helper/StyleHelperTest.php +++ b/tests/Spout/Reader/XLSX/Helper/StyleHelperTest.php @@ -59,6 +59,16 @@ class StyleHelperTest extends \PHPUnit_Framework_TestCase $this->assertFalse($shouldFormatAsDate); } + /** + * @return void + */ + public function testShouldFormatNumericValueAsDateWithGeneralFormat() + { + $styleHelper = $this->getStyleHelperMock([[], ['applyNumberFormat' => true, 'numFmtId' => 0]]); + $shouldFormatAsDate = $styleHelper->shouldFormatNumericValueAsDate(1); + $this->assertFalse($shouldFormatAsDate); + } + /** * @return void */