Browse Source

Time zone fixes:

- Handle -00:00 better; it is rejected by PHP
- Use P instead of O to format time zone output
master
J. King 10 months ago
parent
commit
eb89a89593
  1. 18
      lib/Microformats/Parser.php

18
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) {

Loading…
Cancel
Save