Получить время UTC в PHP

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

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

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

Ответ 1

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

Ответ 2

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

<?php
print gmdate("Y-m-d\TH:i:s\Z");

Ответ 3

Как уже было сказано ранее, начиная с 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

Ответ 4

$time = time();
$check = $time+date("Z",$time);
echo strftime("%B %d, %Y @ %H:%M:%S UTC", $check);

Ответ 5

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

Ответ 6

Помимо вызова gmdate вы также можете поместить этот код перед остальной частью кода:

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

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

Ответ 7

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

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

gmmktime будет работать, только если ваше серверное время использует UTC. Например, мой сервер настроен на US/Pacific. перечисленная функция выше эха обратно в тихоокеанское время.

Ответ 8

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

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

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

time();

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

Ответ 9

со строкой 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

Ответ 10

Вы можете использовать следующее, чтобы получить время 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');

Ответ 11

/**
     * Converts a local Unix timestamp to GMT
     *
     * @param   int Unix timestamp
     * @return  int
     */
    function local_to_gmt($time = '')
    {
        if ($time === '')
        {
            $time = time();
        }

        return mktime(
            gmdate('G', $time),
            gmdate('i', $time),
            gmdate('s', $time),
            gmdate('n', $time),
            gmdate('j', $time),
            gmdate('Y', $time)
        );
    }