PHP конвертировать дату и время в UTC - PullRequest
81 голосов
/ 19 января 2010

Мне нужен простой способ конвертировать метку даты в UTC (из любого часового пояса, на котором находится сервер) НАДЕЖДУ, без использования каких-либо библиотек.

Ответы [ 16 ]

1 голос
/ 09 августа 2012

В PHP 5 или выше вы можете использовать функцию datetime :: format (см. Документацию http://us.php.net/manual/en/datetime.format.php)

 echo strftime( '%e %B %Y' , 
    date_create_from_format('Y-d-m G:i:s', '2012-04-05 11:55:21')->format('U')
    );  // 4 May 2012
1 голос
/ 19 января 2010

http://php.net/manual/en/function.strtotime.php или если вам нужно использовать не строку, а компоненты времени, тогда http://us.php.net/manual/en/function.mktime.php

0 голосов
/ 25 октября 2017

в качестве альтернативы вы можете попробовать это:

<?php echo (new DateTime("now", new DateTimeZone('Asia/Singapore')))->format("Y-m-d H:i:s e"); ?>

это выдаст:

2017-10-25 17:13:20 Азия / Сингапур

Вы можете использовать это внутри атрибута значения поля ввода текста, если хотите отображать только для чтения дату.

удалите 'e', ​​если вы не хотите показывать свой регион / страну.

0 голосов
/ 11 сентября 2017

Как улучшение Ответ Фила Паффорда (я не понял его 'Y-d-mTG: i: sz', и он предложил вернуть часовой пояс). Поэтому я предлагаю это (я усложнил, изменив формат HMTL в обычном / текстовом формате):

<?php
header('content-type: text/plain;');
$my_timestamp = strtotime("2010-01-19 00:00:00");

// stores timezone
$my_timezone = date_default_timezone_get();
echo date(DATE_ATOM, $my_timestamp)."\t ($my_timezone date)\n";

// changes timezone
date_default_timezone_set("UTC");
echo date("Y-m-d\TH:i:s\Z", $my_timestamp)."\t\t (ISO8601 UTC date)\n";
echo date("Y-m-d H:i:s", $my_timestamp)."\t\t (your UTC date)\n";

// reverts change
date_default_timezone_set($my_timezone);
echo date(DATE_ATOM, $my_timestamp)."\t ($my_timezone date is back)\n"; 
?>
0 голосов
/ 09 декабря 2016

Функция нормализации общего назначения для форматирования любой временной метки из любого часового пояса в другой. Очень полезно для хранения даты и времени пользователей из разных часовых поясов в реляционной базе данных. Для сравнения базы данных сохраните метку времени как UTC и используйте с 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;
    }
}

Использование:

$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 голосов
/ 18 октября 2011

try

дата эха ('F d Y', strtotime ('2010-01-19 00:00:00'));

выведет:

19 января 2010

вам нужно изменить время форматирования, чтобы увидеть другой вывод

...