diff --git a/lib/Microformats/Parser.php b/lib/Microformats/Parser.php index ff7b1b5..8e9e40a 100644 --- a/lib/Microformats/Parser.php +++ b/lib/Microformats/Parser.php @@ -213,26 +213,26 @@ class Parser { '\z' => self::DATE_TYPE_ZULU, ]; protected const DATE_OUTPUT_FORMATS = [ - self::DATE_TYPE_DATE | self::DATE_TYPE_SEC | self::DATE_TYPE_ZONE => 'Y-m-d H:i:sO', + self::DATE_TYPE_DATE | self::DATE_TYPE_SEC | self::DATE_TYPE_ZONE => 'Y-m-d H:i:sP', self::DATE_TYPE_DATE | self::DATE_TYPE_SEC | self::DATE_TYPE_ZULU => 'Y-m-d H:i:s\Z', - self::DATE_TYPE_DATE | self::DATE_TYPE_MIN | self::DATE_TYPE_ZONE => 'Y-m-d H:iO', + self::DATE_TYPE_DATE | self::DATE_TYPE_MIN | self::DATE_TYPE_ZONE => 'Y-m-d H:iP', self::DATE_TYPE_DATE | self::DATE_TYPE_MIN | self::DATE_TYPE_ZULU => 'Y-m-d H:i\Z', - self::DATE_TYPE_DATE | self::DATE_TYPE_HOUR | self::DATE_TYPE_ZONE => 'Y-m-d H:00O', + self::DATE_TYPE_DATE | self::DATE_TYPE_HOUR | self::DATE_TYPE_ZONE => 'Y-m-d H:00P', self::DATE_TYPE_DATE | self::DATE_TYPE_HOUR | self::DATE_TYPE_ZULU => 'Y-m-d H:00\Z', self::DATE_TYPE_DATE | self::DATE_TYPE_SEC => 'Y-m-d H:i:s', self::DATE_TYPE_DATE | self::DATE_TYPE_MIN => 'Y-m-d H:i', self::DATE_TYPE_DATE | self::DATE_TYPE_HOUR => 'Y-m-d H:00', self::DATE_TYPE_DATE => 'Y-m-d', - self::DATE_TYPE_SEC | self::DATE_TYPE_ZONE => 'H:i:sO', + self::DATE_TYPE_SEC | self::DATE_TYPE_ZONE => 'H:i:sP', self::DATE_TYPE_SEC | self::DATE_TYPE_ZULU => 'H:i:s\Z', - self::DATE_TYPE_MIN | self::DATE_TYPE_ZONE => 'H:iO', + self::DATE_TYPE_MIN | self::DATE_TYPE_ZONE => 'H:iP', self::DATE_TYPE_MIN | self::DATE_TYPE_ZULU => 'H:i\Z', - self::DATE_TYPE_HOUR | self::DATE_TYPE_ZONE => 'H:00O', + self::DATE_TYPE_HOUR | self::DATE_TYPE_ZONE => 'H:00P', self::DATE_TYPE_HOUR | self::DATE_TYPE_ZULU => 'H:00\Z', self::DATE_TYPE_SEC => 'H:i:s', self::DATE_TYPE_MIN => 'H:i', self::DATE_TYPE_HOUR => 'H:00', - self::DATE_TYPE_ZONE => 'O', + self::DATE_TYPE_ZONE => 'P', self::DATE_TYPE_ZULU => '\Z', ]; @@ -1114,8 +1114,8 @@ class Parser { * @param string $input The string to test for validity */ protected function parseDatePart(string $input): array { - // do a first-pass normalization on the input; this normalizes am/pm and normalizes and trims whitespace - $input = trim(preg_replace(['/([ap])\.m\.$/', '/\s+/'], ["$1m", " "], strtr($input, "APM", "apm"))); + // do a first-pass normalization on the input; this normalizes am/pm and normalizes, removes -00:00 time zone offsets, and trims whitespace + $input = preg_replace(['/([ap])\.m\./', '/\s+/s', '/(?:^-00|(:\d\d)? ?-00)(?::?00)$/'], ["$1m", " ", "$1"], strtr(trim($input), "APM", "apm")); // match against all valid date/time format patterns and returns the matched parts // we try with space and with T between date and time, as well as with and without space before time zone foreach (self::DATE_INPUT_FORMATS as $df => $dp) {