Domanda

Qual è il modo più semplice per ottenere l'offset UTC in PHP, rispetto al fuso orario corrente (di sistema)?

È stato utile?

Soluzione

  date('Z');

restituisce l'offset UTC in secondi.

Altri suggerimenti

// will output something like +02:00 or -04:00
echo date('P');

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 testato, ma dovrebbe funzionare

Ho fatto una versione leggermente modificata di ciò che ha fatto Oscar.

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

Questo mi ha dato la differenza dal mio fuso orario, EST, a UTC, in ore.

Il valore di $ utc_offset era -4.

Semplicemente puoi farlo:

//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

Questa è la stessa funzione JavaScript date.getTimezoneOffset () :

<?php
echo date('Z')/-60;
?>

date (" Z ") restituirà l'offset UTC relativo al fuso orario del server e non al fuso orario della macchina dell'utente. Per ottenere il fuso orario della macchina dell'utente è possibile utilizzare la funzione javascript getTimezoneOffset () che restituisce la differenza di tempo tra l'ora UTC e l'ora locale, in minuti.

<script type="text/javascript">
    d = new Date();
    window.location.href = "page.php?offset=" + d.getTimezoneOffset();
</script>

E in page.php che contiene il tuo codice php, puoi fare quello che vuoi con quel valore di offset. O invece di reindirizzare a un'altra pagina, puoi inviare il valore di offset al tuo script php tramite Ajax, in base alle tue esigenze.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top