web-dev-qa-db-fra.com

Décalage UTC en PHP

Quelle est la façon la plus simple d'obtenir le décalage UTC en PHP, par rapport au fuseau horaire (système) actuel?

41
Adam Ernst
  date('Z');

renvoie le décalage UTC en secondes.

80
Czimi
// will output something like +02:00 or -04:00
echo date('P');
31
Tuhin Bepari

timezone_offset_get()

$this_tz_str = date_default_timezone_get();
$this_tz = new DateTimeZone($this_tz_str);
$now = new DateTime("now", $this_tz);
$offset = $this_tz->getOffset($now);

Non testé, mais devrait fonctionner

19
John Millikin

J'ai fait une version légèrement modifiée de ce qu'a fait Oscar.

date_default_timezone_set('America/New_York');
$utc_offset =  date('Z') / 3600;

Cela m'a donné le décalage de mon fuseau horaire, EST, à UTC, en heures.

La valeur de $ utc_offset était de -4.

16
Kenny

Vous pouvez simplement le faire:

//Object oriented style
function getUTCOffset_OOP($timezone)
{
    $current   = timezone_open($timezone);
    $utcTime  = new \DateTime('now', new \DateTimeZone('UTC'));
    $offsetInSecs =  $current->getOffset($utcTime);
    $hoursAndSec = gmdate('H:i', abs($offsetInSecs));
    return stripos($offsetInSecs, '-') === false ? "+{$hoursAndSec}" : "-{$hoursAndSec}";
}

//Procedural style
function getUTCOffset($timezone)
{
    $current   = timezone_open($timezone);
    $utcTime  = new \DateTime('now', new \DateTimeZone('UTC'));
    $offsetInSecs =  timezone_offset_get( $current, $utcTime);
    $hoursAndSec = gmdate('H:i', abs($offsetInSecs));
    return stripos($offsetInSecs, '-') === false ? "+{$hoursAndSec}" : "-{$hoursAndSec}";
}


$timezone = 'America/Mexico_City';

echo "Procedural style<br>";
echo getUTCOffset($timezone); //-06:00
echo "<br>";
echo "(UTC " . getUTCOffset($timezone) . ") " . $timezone; // (UTC -06:00) America/Mexico_City
echo "<br>--------------<br>";
echo "Object oriented style<br>";
echo getUTCOffset_OOP($timezone); //-06:00
echo "<br>";
echo "(UTC " . getUTCOffset_OOP($timezone) . ") " . $timezone; // (UTC -06:00) America/Mexico_City
5
HMagdy

C'est la même fonction JavaScript date.getTimezoneOffset():

<?php
echo date('Z')/-60;
?>
3
زياد