X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FUtil%2FDateTimeFormat.php;h=862ce6e9affe08e0e87b6df66d1700c442ba8597;hb=b5ad8c3e153976cf3e63753597377f09852d98d7;hp=9374ec836007b3aa4664e80cdf9dc1e44c991745;hpb=e56a53647bd5469551bf4f9ef2df50a5dd16b943;p=friendica.git diff --git a/src/Util/DateTimeFormat.php b/src/Util/DateTimeFormat.php index 9374ec8360..862ce6e9af 100644 --- a/src/Util/DateTimeFormat.php +++ b/src/Util/DateTimeFormat.php @@ -52,7 +52,7 @@ class DateTimeFormat * @return string * @throws Exception */ - public static function utc($time, $format = self::MYSQL) + public static function utc(string $time, string $format = self::MYSQL): string { return self::convert($time, 'UTC', 'UTC', $format); } @@ -102,7 +102,7 @@ class DateTimeFormat * @return string * @throws Exception */ - public static function utcNow($format = self::MYSQL) + public static function utcNow(string $format = self::MYSQL): string { return self::utc('now', $format); } @@ -135,6 +135,8 @@ class DateTimeFormat $s = 'now'; } + $s = self::fix($s); + /* * Slight hackish adjustment so that 'zero' datetime actually returns what is intended * otherwise we end up with -0001-11-30 ... @@ -158,7 +160,7 @@ class DateTimeFormat try { $d = new DateTime($s, $from_obj); } catch (Exception $e) { - Logger::notice('DateTimeFormat::convert: exception: ' . $e->getMessage()); + Logger::warning('DateTimeFormat::convert: exception: ' . $e->getMessage()); $d = new DateTime('now', $from_obj); } @@ -173,6 +175,32 @@ class DateTimeFormat return $d->format($format); } + /** + * Fix weird date formats + * + * @see \Friendica\Test\src\Util\DateTimeFormatTest::dataFix() for a list of examples handled by this method. + * @param string $dateString + * @return string + */ + public static function fix(string $dateString): string + { + $patterns = [ + ['#(\w+), (\d+/\d+/\d+) - (\d+:\d+)#', '$1, $2 $3'], + ['#(\d+-\d+-\d+)T(\d+:\d+:\d+)ZZ#', '$1T$2Z'], + ['#(\d+-\d+-\d+)T(\d+:\d+:\d+\.\d+)ZZ#', '$1T$2Z'], + ['#(\w+), (\d+ \w+ \d+) (\d+:\d+:\d+) (.+)#', '$2 $3 $4'], + ['#(\d+:\d+) (\w+), (\w+) (\d+), (\d+)#', '$1 $2 $3 $4 $5'], + ['#(\w+ \d+, \d+) - (\d+:\d+)#', '$1, $2'], + ['~(\d+-\d+-\d+)T(\d+:\d+:\d+)+(\d+:\d+)~', '$1T$2+$3'], + ]; + + foreach ($patterns as $pattern) { + $dateString = preg_replace($pattern[0], $pattern[1], $dateString); + } + + return $dateString; + } + /** * Checks, if the given string is a date with the pattern YYYY-MM *