UTC Date/Time String to Timezone

前端 未结 6 627
萌比男神i
萌比男神i 2020-12-02 10:03

How do I convert a date/time string (e.g. 2011-01-01 15:00:00) that is UTC to any given timezone php supports, such as America/New_York, or Europe/San_Marino.

相关标签:
6条回答
  • 2020-12-02 10:10

    Assuming the UTC is not included in the string then:

    date_default_timezone_set('America/New_York');
    $datestring = '2011-01-01 15:00:00';  //Pulled in from somewhere
    $date = date('Y-m-d H:i:s T',strtotime($datestring . ' UTC'));
    echo $date;  //Should get '2011-01-01 10:00:00 EST' or something like that
    

    Or you could use the DateTime object.

    0 讨论(0)
  • 2020-12-02 10:22

    General purpose normalisation function to format any timestamp from any timezone to other. Very useful for storing datetimestamps of users from different timezones in a relational database. For database comparisons store timestamp as UTC and use with gmdate('Y-m-d H:i:s')

    /**
     * Convert Datetime from any given olsonzone to other.
     * @return datetime in user specified format
     */
    
    function datetimeconv($datetime, $from, $to)
    {
        try {
            if ($from['localeFormat'] != 'Y-m-d H:i:s') {
                $datetime = DateTime::createFromFormat($from['localeFormat'], $datetime)->format('Y-m-d H:i:s');
            }
            $datetime = new DateTime($datetime, new DateTimeZone($from['olsonZone']));
            $datetime->setTimeZone(new DateTimeZone($to['olsonZone']));
            return $datetime->format($to['localeFormat']);
        } catch (\Exception $e) {
            return null;
        }
    }
    

    Usage:

    $from = ['localeFormat' => "d/m/Y H:i A", 'olsonZone' => 'Asia/Calcutta'];
    
    $to = ['localeFormat' => "Y-m-d H:i:s", 'olsonZone' => 'UTC'];
    
    datetimeconv("14/05/1986 10:45 PM", $from, $to); // returns "1986-05-14 17:15:00"
    
    0 讨论(0)
  • 2020-12-02 10:23

    How about:

    $timezone = new DateTimeZone('UTC');
    $date = new DateTime('2011-04-21 13:14', $timezone);
    echo $date->format;
    
    0 讨论(0)
  • 2020-12-02 10:24

    PHP's DateTime object is pretty flexible.

    $UTC = new DateTimeZone("UTC");
    $newTZ = new DateTimeZone("America/New_York");
    $date = new DateTime( "2011-01-01 15:00:00", $UTC );
    $date->setTimezone( $newTZ );
    echo $date->format('Y-m-d H:i:s');
    
    0 讨论(0)
  • 2020-12-02 10:28

    PHP's DateTime object is pretty flexible.

    Since the user asked for more than one timezone option, then you can make it generic.

    Generic Function

    function convertDateFromTimezone($date,$timezone,$timezone_to,$format){
     $date = new DateTime($date,new DateTimeZone($timezone));
     $date->setTimezone( new DateTimeZone($timezone_to) );
     return $date->format($format);
    }
    

    Usage:

    echo  convertDateFromTimezone('2011-04-21 13:14','UTC','America/New_York','Y-m-d H:i:s');
    

    Output:

    2011-04-21 09:14:00

    0 讨论(0)
  • 2020-12-02 10:31
    function _settimezone($time,$defaultzone,$newzone)
    {
    $date = new DateTime($time, new DateTimeZone($defaultzone));
    $date->setTimezone(new DateTimeZone($newzone));
    $result=$date->format('Y-m-d H:i:s');
    return $result;
    }
    
    $defaultzone="UTC";
    $newzone="America/New_York";
    $time="2011-01-01 15:00:00";
    $newtime=_settimezone($time,$defaultzone,$newzone);
    
    0 讨论(0)
提交回复
热议问题