web-dev-qa-db-fra.com

obtenir l'heure UTC dans PHP

Comment obtenir l'horodatage UTC/GMT +/- en utilisant la fonction date () de PHP? Par exemple, si j'essaye

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

Je vais obtenir un horodatage Unix; mais je dois obtenir un horodatage UTC/GMT avec la chaîne GMT/UTC +/- 0400 ou GMT/UTC +/- 1000 en fonction du minutage local.

109

Utiliser gmdate renverra toujours une date GMT. La syntaxe est la même que pour date.

99
nikc.org

Un simple gmdate () suffira

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

Comme précédemment répondu ici , depuis PHP 5.2.0, vous pouvez utiliser la classe DateTime et spécifier le fuseau horaire UTC avec une instance de DateTimeZone.

Le DateTime documentation __ construct () suggère de passer "maintenant" comme premier paramètre lors de la création d'une instance DateTime et de la spécification d'un fuseau horaire pour obtenir l'heure actuelle.

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

echo $date_utc->format(\DateTime::RFC850); # Saturday, 18-Apr-15 03:23:46 UTC
39
Jessedc
$time = time();
$check = $time+date("Z",$time);
echo strftime("%B %d, %Y @ %H:%M:%S UTC", $check);
34
Sudhir Bastakoti
date("Y-m-d H:i:s", time() - date("Z"))
14
Allanrbo

En plus d'appeler gmdate, vous pouvez également mettre ce code avant votre reste de code:

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

Cela fera reposer vos appels liés à la date/heure pour utiliser le fuseau horaire GMT/UTC.

12
anubhava

Obtention de la date UTC

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

Obtention de l'horodatage UTC

time();

Le résultat ne sera pas différent même si vous avez date_default_timezone_set sur votre code.

9
StefansArya

Vous pouvez utiliser la fonction gmmktime sans arguments pour obtenir l’horodatage UTC actuel:

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

gmmktime ne fonctionnera que si l'heure de votre serveur utilise l'heure UTC. Par exemple, mon serveur est défini sur US/Pacific. la fonction énumérée ci-dessus renvoie à l'heure du Pacifique.

5
RicoRico

avec la chaîne GMT/UTC +/- 0400 ou GMT/UTC +/- 1000 basé sur les horaires locaux

Votre fichier personnalisé format manque tout simplement O pour vous indiquer les décalages de fuseau horaire par rapport à l'heure locale.

Différence en heures avec l'heure de Greenwich (GMT) Exemple: +0200

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

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

Cependant, pour une portabilité/interopérabilité optimisée, je vous recommanderais d'utiliser le format de date ISO8601c

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

Vous pouvez également utiliser gmdate et la chaîne de décalage du fuseau horaire sera toujours +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

2
Jeff Puckett

Vous pouvez utiliser ce qui suit pour obtenir l'heure 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');
1
Dalip
/**
     * 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)
        );
    }
0
realmag777