diff options
author | Gregor Harlan <mail@gh01.de> | 2020-07-26 20:29:40 +0200 |
---|---|---|
committer | Christoph M. Becker <cmbecker69@gmx.de> | 2020-08-03 10:44:48 +0200 |
commit | a6e3ce4fd656132e5482e2bc7fc0f7cdf4633077 (patch) | |
tree | 2ab4d18d4f83c27ea49909b7b883a412f4940b7b | |
parent | bb8b95be636528ebfc6f00b2153254d06e27ead9 (diff) | |
download | php-git-a6e3ce4fd656132e5482e2bc7fc0f7cdf4633077.tar.gz |
datetime: new format "p", same as "P" but returning "Z" for UTC
-rw-r--r-- | NEWS | 2 | ||||
-rw-r--r-- | UPGRADING | 2 | ||||
-rw-r--r-- | ext/date/php_date.c | 6 | ||||
-rw-r--r-- | ext/date/tests/date_format_timezone.phpt | 43 |
4 files changed, 53 insertions, 0 deletions
@@ -13,6 +13,8 @@ PHP NEWS - 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) @@ -683,6 +683,8 @@ PHP 8.0 UPGRADE NOTES - 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 diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 9839d768f9..8f755d887f 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -711,6 +711,12 @@ static zend_string *date_format(const char *format, size_t format_len, timelib_t /* 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) ? '-' : '+') : '+', diff --git a/ext/date/tests/date_format_timezone.phpt b/ext/date/tests/date_format_timezone.phpt new file mode 100644 index 0000000000..ea4575e4ce --- /dev/null +++ b/ext/date/tests/date_format_timezone.phpt @@ -0,0 +1,43 @@ +--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" |