[wp-trac] [WordPress Trac] #53897: PHP 8.1: strftime() is deprecated

WordPress Trac noreply at wordpress.org
Mon Aug 9 19:08:23 UTC 2021


#53897: PHP 8.1: strftime() is deprecated
------------------------------------------+-----------------------------
 Reporter:  jrf                           |       Owner:  SergeyBiryukov
     Type:  defect (bug)                  |      Status:  closed
 Priority:  normal                        |   Milestone:  5.9
Component:  Build/Test Tools              |     Version:
 Severity:  normal                        |  Resolution:  fixed
 Keywords:  has-patch early php81 commit  |     Focuses:
------------------------------------------+-----------------------------
Changes (by SergeyBiryukov):

 * owner:  (none) => SergeyBiryukov
 * status:  new => closed
 * resolution:   => fixed


Comment:

 In [changeset:"51587" 51587]:
 {{{
 #!CommitTicketReference repository="" revision="51587"
 Code Modernization: Replace `strftime()` and `gmstrftime()` usage in unit
 tests.

 Since PHP 8.1, the `strftime()` and `gmstrftime()` functions are
 deprecated:

 > The `strftime()` and `gmstrftime()` functions exhibit similar issues as
 `strptime()`, in that the formats they support, as well as their behavior,
 is platform-dependent. Unlike `strptime()`, these functions are available
 on Windows, though with a different feature set than on Linux. Musl-based
 distributions like Alpine do not support timezone-related format
 specifiers correctly. These functions are also locale-based, and as such
 may exhibit thread-safety issues.
 >
 > `date()` or `DateTime::format()` provide portable alternatives, and
 `IntlDateFormatter::format()` provides a more sophisticated, localization-
 aware alternative.

 Reference:
 [https://wiki.php.net/rfc/deprecations_php_8_1#strftime_and_gmstrftime PHP
 RFC: Deprecations for PHP 8.1: strftime() and gmstrftime()]

 > The `strftime()` and `gmstrftime()` functions have been deprecated in
 favor of
 > `date()/DateTime::format()` (for locale-independent formatting) or
 > `IntlDateFormatter::format()` (for locale-dependent formatting).

 Reference: [https://github.com/php/php-
 src/blob/1cf4fb739f7a4fa8404a4c0958f13d04eae519d4/UPGRADING#L379-L381 PHP
 8.1 Upgrade Notes].

 Aside from one instance in SimplePie, the `strftime()` and `gmstrftime()`
 functions are only used within the test suite of WordPress to create
 formatted timestamps.

 As the function is used in test code, this leads to test warnings like
 this on PHP 8.1:
 {{{
 Deprecated: Function strftime() is deprecated in
 path/to/tests/phpunit/tests/canonical/postStatus.php on line 37
 }}}

 These calls can all be safely converted to use a pattern along the lines
 of:
 {{{#!php
 <?php
 date_format( date_create( 'time phrase or timestamp' ), $format )
 }}}

 Other references:
 * [https://www.php.net/manual/en/function.strftime.php PHP Manual:
 strftime()] (for the old format string characters)
 * [https://www.php.net/manual/en/datetime.format.php PHP Manual:
 DateTime::format()] (for the new format string characters)
 * [https://www.php.net/manual/en/datetime.construct.php PHP Manual:
 DateTime::__construct()] (see Example 2 for a Unix timestamp code sample)

 Props jrf, SergeyBiryukov.
 Fixes #53897.
 }}}

-- 
Ticket URL: <https://core.trac.wordpress.org/ticket/53897#comment:4>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform


More information about the wp-trac mailing list