Date/Time: Make sure `date_i18n()` correctly handles zero timestamp after [45901].

Props soulseekah, gravityview, Rarst.
Reviewed by azaozz, SergeyBiryukov.
Fixes #28636.

git-svn-id: https://develop.svn.wordpress.org/trunk@46577 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Sergey Biryukov 2019-10-25 11:03:13 +00:00
parent 2092a37d48
commit 38b4ecf2ed
2 changed files with 20 additions and 2 deletions

View File

@ -176,9 +176,9 @@ function date_i18n( $format, $timestamp_with_offset = false, $gmt = false ) {
*/ */
if ( 'U' === $format ) { if ( 'U' === $format ) {
$date = $timestamp; $date = $timestamp;
} elseif ( $gmt && ! $timestamp_with_offset ) { // Current time in UTC. } elseif ( $gmt && false === $timestamp_with_offset ) { // Current time in UTC.
$date = wp_date( $format, null, new DateTimeZone( 'UTC' ) ); $date = wp_date( $format, null, new DateTimeZone( 'UTC' ) );
} elseif ( ! $timestamp_with_offset ) { // Current time in site's timezone. } elseif ( false === $timestamp_with_offset ) { // Current time in site's timezone.
$date = wp_date( $format ); $date = wp_date( $format );
} else { } else {
/* /*

View File

@ -19,6 +19,24 @@ class Tests_Date_I18n extends WP_UnitTestCase {
$this->assertEquals( $wp_timestamp, date_i18n( 'U', 'invalid' ), '', 5 ); $this->assertEquals( $wp_timestamp, date_i18n( 'U', 'invalid' ), '', 5 );
} }
/**
* @ticket 28636
*/
public function test_should_handle_zero_timestamp() {
$timezone = 'Europe/Kiev';
update_option( 'timezone_string', $timezone );
$datetime = DateTimeImmutable::createFromFormat(
'Y-m-d H:i:s',
'1970-01-01 00:00:00',
new DateTimeZone( $timezone )
);
$rfc3339 = $datetime->format( DATE_RFC3339 );
$this->assertEquals( 0, date_i18n( 'U', 0 ) );
$this->assertEquals( $rfc3339, date_i18n( DATE_RFC3339, 0 ) );
}
public function test_should_format_date() { public function test_should_format_date() {
$this->assertEquals( strtotime( gmdate( 'Y-m-d H:i:s' ) ), strtotime( date_i18n( 'Y-m-d H:i:s' ) ), 'The dates should be equal', 2 ); $this->assertEquals( strtotime( gmdate( 'Y-m-d H:i:s' ) ), strtotime( date_i18n( 'Y-m-d H:i:s' ) ), 'The dates should be equal', 2 );
} }