From 73d5d0ea1710c94b261cc3c8601e79379e0f07a2 Mon Sep 17 00:00:00 2001 From: Adrien Loison Date: Tue, 18 Oct 2016 11:55:36 -0700 Subject: [PATCH] Remove text suffix in XLSX date formats (#341) Some date formats have a text suffix, e.g. "mm/dd/yy;@". We should remove the ";...@" part. --- src/Spout/Reader/XLSX/Helper/DateFormatHelper.php | 4 +++- tests/Spout/Reader/XLSX/Helper/DateFormatHelperTest.php | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Spout/Reader/XLSX/Helper/DateFormatHelper.php b/src/Spout/Reader/XLSX/Helper/DateFormatHelper.php index 4acbef7..9dba4c6 100644 --- a/src/Spout/Reader/XLSX/Helper/DateFormatHelper.php +++ b/src/Spout/Reader/XLSX/Helper/DateFormatHelper.php @@ -62,7 +62,9 @@ class DateFormatHelper public static function toPHPDateFormat($excelDateFormat) { // Remove brackets potentially present at the beginning of the format string - $dateFormat = preg_replace('/^(\[\$[^\]]+?\])/i', '', $excelDateFormat); + // and text portion of the format at the end of it (starting with ";") + // See ยง18.8.31 of ECMA-376 for more detail. + $dateFormat = preg_replace('/^(?:\[\$[^\]]+?\])?([^;]*).*/', '$1', $excelDateFormat); // Double quotes are used to escape characters that must not be interpreted. // For instance, ["Day " dd] should result in "Day 13" and we should not try to interpret "D", "a", "y" diff --git a/tests/Spout/Reader/XLSX/Helper/DateFormatHelperTest.php b/tests/Spout/Reader/XLSX/Helper/DateFormatHelperTest.php index b6d852c..cca02a7 100644 --- a/tests/Spout/Reader/XLSX/Helper/DateFormatHelperTest.php +++ b/tests/Spout/Reader/XLSX/Helper/DateFormatHelperTest.php @@ -29,6 +29,8 @@ class DateFormatHelperTest extends \PHPUnit_Framework_TestCase ['[$USD-F480]hh:mm AM/PM', 'h:i A'], ['"Day " d', '\\D\\a\\y\\ j'], ['yy "Year" m "Month"', 'y \\Y\\e\\a\\r n \\M\\o\\n\\t\\h'], + ['mmm-yy;@', 'M-y'], + ['[$-409]hh:mm AM/PM;"foo"@', 'h:i A'], ]; }