From dc036d53331c503453bd48657af7aa36bc3d165b Mon Sep 17 00:00:00 2001 From: Felix Arntz Date: Tue, 3 Jul 2018 15:59:25 +0000 Subject: [PATCH] Date/Time: Add support for `gmt_offset` to `date_i18n()`. Prior to this change, `date_i18n()` only supported the `timezone_string` option, causing incorrect timezones to appear in formatted dates on sites that still rely on the `gmt_offset` option. Props Rarst. Fixes #34835. Built from https://develop.svn.wordpress.org/trunk@43387 git-svn-id: http://core.svn.wordpress.org/trunk@43215 1a063a9b-81f0-0310-95a4-ce76da25c4cd --- wp-includes/functions.php | 30 ++++++++++++++++++++++++++++++ wp-includes/version.php | 2 +- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/wp-includes/functions.php b/wp-includes/functions.php index 3c4a301298..b4df760ec6 100644 --- a/wp-includes/functions.php +++ b/wp-includes/functions.php @@ -138,6 +138,36 @@ function date_i18n( $dateformatstring, $timestamp_with_offset = false, $gmt = fa $dateformatstring = substr( $dateformatstring, 1, strlen( $dateformatstring ) - 1 ); } } + } else { + $offset = get_option( 'gmt_offset' ); + foreach ( $timezone_formats as $timezone_format ) { + if ( 'I' === $timezone_format ) { + continue; + } + + if ( false !== strpos( $dateformatstring, $timezone_format ) ) { + if ( 'Z' === $timezone_format ) { + $formatted = (string) ( $offset * HOUR_IN_SECONDS ); + } else { + $prefix = ''; + $hours = (int) $offset; + $separator = ''; + $minutes = abs( ( $offset - $hours ) * 60 ); + + if ( 'T' === $timezone_format ) { + $prefix = 'GMT'; + } elseif ( 'e' === $timezone_format || 'P' === $timezone_format ) { + $separator = ':'; + } + + $formatted = sprintf( '%s%+03d%s%02d', $prefix, $hours, $separator, $minutes ); + } + + $dateformatstring = ' ' . $dateformatstring; + $dateformatstring = preg_replace( "/([^\\\])$timezone_format/", "\\1" . backslashit( $formatted ), $dateformatstring ); + $dateformatstring = substr( $dateformatstring, 1 ); + } + } } } $j = @date( $dateformatstring, $i ); diff --git a/wp-includes/version.php b/wp-includes/version.php index a3ec2ae679..906ec8a339 100644 --- a/wp-includes/version.php +++ b/wp-includes/version.php @@ -4,7 +4,7 @@ * * @global string $wp_version */ -$wp_version = '5.0-alpha-43386'; +$wp_version = '5.0-alpha-43387'; /** * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.