- Date:
. Fixed bug #60302 (DateTime::createFromFormat should new static(), not new
self()). (Derick)
+ . Implemented FR #79903 (datetime: new format "p", same as "P" but returning
+ "Z" for UTC). (gharlan)
- JIT:
. Fixed bug #79864 (JIT segfault in Symfony OptionsResolver). (Dmitry)
- Date:
. Added DateTime::createFromInterface() and
DateTimeImmutable::createFromInterface().
+ . Added the DateTime format specifier "p" which is the same as "P" but
+ returning "Z" for UTC.
- Dom:
. Introduce DOMParentNode and DOMChildNode with new traversal and
/* timezone */
case 'I': length = slprintf(buffer, sizeof(buffer), "%d", localtime ? offset->is_dst : 0); break;
+ case 'p':
+ if (!localtime || strcmp(offset->abbr, "UTC") == 0 || strcmp(offset->abbr, "Z") == 0) {
+ length = slprintf(buffer, sizeof(buffer), "%s", "Z");
+ break;
+ }
+ /* break intentionally missing */
case 'P': rfc_colon = 1; /* break intentionally missing */
case 'O': length = slprintf(buffer, sizeof(buffer), "%c%02d%s%02d",
localtime ? ((offset->offset < 0) ? '-' : '+') : '+',
--- /dev/null
+--TEST--
+Test date_format() function : timezone offset
+--FILE--
+<?php
+
+$tz = array("UTC", "Europe/London", "Europe/Berlin", "America/Chicago");
+
+foreach ($tz as $zone) {
+ echo $zone, "\n";
+ date_default_timezone_set($zone);
+
+ $date = date_create("2020-03-10 22:30:41");
+
+ var_dump( date_format($date, "O") );
+ var_dump( date_format($date, "P") );
+ var_dump( date_format($date, "p") );
+}
+
+echo "Z\n";
+$date = date_create("2020-03-10 22:30:41Z");
+
+var_dump( date_format($date, "p") );
+
+?>
+--EXPECT--
+UTC
+string(5) "+0000"
+string(6) "+00:00"
+string(1) "Z"
+Europe/London
+string(5) "+0000"
+string(6) "+00:00"
+string(6) "+00:00"
+Europe/Berlin
+string(5) "+0100"
+string(6) "+01:00"
+string(6) "+01:00"
+America/Chicago
+string(5) "-0500"
+string(6) "-05:00"
+string(6) "-05:00"
+Z
+string(1) "Z"