получить UTC время в PHP - PullRequest
106 голосов
/ 28 декабря 2011

Как я могу получить метку времени UTC / GMT +/- с помощью функции PHP date ()? Например, если я попробую

date("Y-m-d H:i:s", time()); 

Я получу метку времени Unix; но мне нужно получить метку времени UTC / GMT со строкой GMT / UTC +/- 0400 или GMT / UTC +/- 1000 на основе местного времени.

Ответы [ 11 ]

96 голосов
/ 28 декабря 2011

Использование gmdate всегда возвращает дату по Гринвичу.Синтаксис такой же, как для date.

80 голосов
/ 15 сентября 2013

Простого gmdate () будет достаточно

<?php
print gmdate("Y-m-d\TH:i:s\Z");
39 голосов
/ 18 апреля 2015

Как ранее отвечал здесь , так как в PHP 5.2.0 вы можете использовать класс DateTime и указать часовой пояс UTC с экземпляром DateTimeZone.

DateTime ___ документация construct () предлагает передать "сейчас" в качестве первого параметра при создании экземпляра DateTime и указать часовой пояс для получения текущего времени.

$date_utc = new \DateTime("now", new \DateTimeZone("UTC"));

echo $date_utc->format(\DateTime::RFC850); # Saturday, 18-Apr-15 03:23:46 UTC
34 голосов
/ 28 декабря 2011
$time = time();
$check = $time+date("Z",$time);
echo strftime("%B %d, %Y @ %H:%M:%S UTC", $check);
14 голосов
/ 10 августа 2016
date("Y-m-d H:i:s", time() - date("Z"))
12 голосов
/ 28 декабря 2011

Кроме звонка gmdate вы также можете поставить этот код перед вашим кодом:

<?php
date_default_timezone_set("UTC");
?>

Это сделает остальные ваши звонки, связанные с датой / временем, для использования часового пояса GMT / UTC.

8 голосов
/ 26 июля 2018

Получение даты UTC

gmdate("Y-m-d H:i:s");

Получение отметки времени UTC

time();

Результат не будет отличаться, даже если у вас есть date_default_timezone_set в вашем коде.

5 голосов
/ 28 декабря 2011

Вы можете использовать функцию gmmktime без аргументов, чтобы получить текущую метку времени UTC:

$time = gmmktime();
echo date("Y-m-d H:i:s", $time); 

gmmktime будет работать, только если время вашего сервера использует UTC.Например, мой сервер настроен на США / Тихий океан.перечисленные выше функции отражаются в обратном тихоокеанском времени.

2 голосов
/ 12 января 2018

со строкой GMT / UTC + / - 0400 или GMT / UTC + / - 1000 в зависимости от местного времени

Ваш заказ формат просто отсутствует O, чтобы дать вам смещения часового пояса от местного времени.

Разница с временем по Гринвичу (GMT) в часах Пример: + 0200

date_default_timezone_set('America/La_Paz');
echo date('Y-m-d H:i:s O');

2018-01-12 12:10:11 -0400

Однако для максимальной переносимости / совместимости я бы рекомендовал использовать ISO8601 формат даты c

date_default_timezone_set('America/La_Paz');
echo date('c');

2018-01-12T12: 10: 11-04: 00

date_default_timezone_set('Australia/Brisbane');
echo date('c');

2018-01-13T02: 10: 11 + 10: 00

Вы также можете использовать gmdate, и строка смещения часового пояса всегда будет +00:00

date_default_timezone_set('America/La_Paz');
echo gmdate('c');

2018-01-12T16: 10: 11 + 00: 00

date_default_timezone_set('Australia/Brisbane');
echo gmdate('c');

2018-01-12T16: 10: 11 + 00: 00

1 голос
/ 01 марта 2016

Вы можете использовать следующее, чтобы получить время UTC:

date_default_timezone_set('Asia/Calcutta');

$current_date = date("Y/m/d g:i A");

$ist_date = DateTime::createFromFormat(
                        '"Y/m/d g:i A"',
                        $current_date,
                        new DateTimeZone('Asia/Calcutta')
                    );

$utc_date = clone $ist_date;
$utc_date->setTimeZone(new DateTimeZone('UTC'));

echo 'UTC:  ' . $utc_date->format('Y-m-d g:i A');
...