WordPress.org

Make WordPress Core

Ticket #40653: 40653.2.diff

File 40653.2.diff, 1.7 KB (added by jdgrimes, 2 years ago)

Don't use DateTImeZone with offsets

  • src/wp-includes/functions.php

     
    5959 * @return int|string Integer if $type is 'timestamp', string otherwise.
    6060 */
    6161function current_time( $type, $gmt = 0 ) {
     62        // Special handling for legacy offset timestamps.
     63        if ( 'timestamp' === $type && ! $gmt ) {
     64                return time() + ( get_option( 'gmt_offset' ) * HOUR_IN_SECONDS );
     65        }
     66
    6267        switch ( $type ) {
    6368                case 'mysql':
    64                         return ( $gmt ) ? gmdate( 'Y-m-d H:i:s' ) : gmdate( 'Y-m-d H:i:s', ( time() + ( get_option( 'gmt_offset' ) * HOUR_IN_SECONDS ) ) );
     69                        $format ='Y-m-d H:i:s';
    6570                case 'timestamp':
    66                         return ( $gmt ) ? time() : time() + ( get_option( 'gmt_offset' ) * HOUR_IN_SECONDS );
     71                        $format = 'U';
    6772                default:
    68                         return ( $gmt ) ? date( $type ) : date( $type, time() + ( get_option( 'gmt_offset' ) * HOUR_IN_SECONDS ) );
     73                        $format = $type;
    6974        }
     75
     76        if ( $gmt ) {
     77                $timezone_string = 'UTC';
     78        } else {
     79                $timezone_string = get_option( 'timezone_string' );
     80
     81                // A direct offset may be used instead of a timezone identifier.
     82                if ( empty( $timezone_string ) ) {
     83                        $offset = get_option( 'gmt_offset' );
     84
     85                        if ( empty( $offset ) ) {
     86                                $timezone_string = 'UTC';
     87                        }
     88                }
     89        }
     90
     91        // There is no way to handle offsets using DateTimeZone in PHP <= 5.4.
     92        if ( $timezone_string ) {
     93                $timezone = timezone_open( $timezone_string );
     94                $datetime = date_create( 'now', $timezone );
     95                $date     = $datetime->format( $format );
     96        } else {
     97                $date = date( $format, time() - $offset * HOUR_IN_SECONDS );
     98        }
     99
     100        if ( 'U' === $format ) {
     101                $date = (int) $date;
     102        }
     103
     104        return $date;
    70105}
    71106
    72107/**