WordPress.org

Make WordPress Core


Ignore:
Timestamp:
08/19/2019 09:05:42 PM (2 months ago)
Author:
SergeyBiryukov
Message:

Date/Time: Use PHP DateTime class API in current_time().

Only use the legacy WP timestamp approach (a sum of timestamp and timezone offset) for timestamp and U formats without the $gmt flag.

Otherwise, make sure the function returns correct local time for any format.

Props Rarst, jdgrimes.
Fixes #40653.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/functions.php

    r45854 r45856  
    4747
    4848/**
    49  * Retrieve the current time based on specified type.
     49 * Retrieves the current time based on specified type.
    5050 *
    5151 * The 'mysql' type will return the time in the format for MySQL DATETIME field.
    52  * The 'timestamp' type will return the current timestamp.
     52 * The 'timestamp' type will return the current timestamp or a sum of timestamp
     53 * and timezone offset, depending on `$gmt`.
    5354 * Other strings will be interpreted as PHP date formats (e.g. 'Y-m-d').
    5455 *
     
    6465 */
    6566function current_time( $type, $gmt = 0 ) {
    66     switch ( $type ) {
    67         case 'mysql':
    68             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         case 'timestamp':
    70             return ( $gmt ) ? time() : time() + ( get_option( 'gmt_offset' ) * HOUR_IN_SECONDS );
    71         default:
    72             return ( $gmt ) ? gmdate( $type ) : gmdate( $type, time() + ( get_option( 'gmt_offset' ) * HOUR_IN_SECONDS ) );
    73     }
     67    // Don't use non-GMT timestamp, unless you know the difference and really need to.
     68    if ( 'timestamp' === $type || 'U' === $type ) {
     69        return $gmt ? time() : time() + (int) ( get_option( 'gmt_offset' ) * HOUR_IN_SECONDS );
     70    }
     71
     72    if ( 'mysql' === $type ) {
     73        $type = 'Y-m-d H:i:s';
     74    }
     75
     76    $timezone = $gmt ? new DateTimeZone( 'UTC' ) : wp_timezone();
     77    $datetime = new DateTime( 'now', $timezone );
     78
     79    return $datetime->format( $type );
    7480}
    7581
Note: See TracChangeset for help on using the changeset viewer.