php[world] 2015 Call for Speakers



(PHP 5 >= 5.2.0)

DateTimeZone::getOffset -- timezone_offset_getRetourne le décalage GMT d'un fuseau horaire


Style orienté objet

public int DateTimeZone::getOffset ( DateTime $datetime )

Style procédural

int timezone_offset_get ( DateTimeZone $object , DateTime $datetime )

timezone_offset_get() retourne le décalage horaire par rapport au GMT pour le paramètre datetime. Le décalage GMT est calculé à partir des informations de fuseau horaire contenu dans l'objet DateTime.

Liste de paramètres


Seulement en style procédural : un DateTimeZone objet retourné par timezone_open()


Objet DateTime qui contient la date dont il faut calculer le décalage.

Valeurs de retour

Retourne le décalage horaire, exprimé en secondes, en cas de succès ou FALSE si une erreur survient.


Exemple #1 Exemple avec DateTimeZone::getOffset()

// Crée deux objets fuseau horaire, un pour Taipei (Taiwan) et un pour 
// Tokyo (Japon)
$dateTimeZoneTaipei = new DateTimeZone("Asia/Taipei");
$dateTimeZoneJapan = new DateTimeZone("Asia/Tokyo");

// Crée deux objets DateTime qui contiennent le même timestampe Unix,
// mais sont situés dans deux fuseaux horaires différents.
$dateTimeTaipei = new DateTime("now"$dateTimeZoneTaipei);
$dateTimeJapan = new DateTime("now"$dateTimeZoneJapan);

// Calcule le décalage horaire GMT pour l'objet $dateTimeTaipei
// mais en utilisant le fuseau horaire de Tokyo
// ($dateTimeZoneJapan).
$timeOffset $dateTimeZoneJapan->getOffset($dateTimeTaipei);

// Devrait afficher int(32400) (pour les dates après le Sat Sep 8 01:00:00 1951 JST).

add a note add a note

User Contributed Notes 2 notes

Fred Gandt
8 months ago
Procedural Style:

// Don't know where the server is or how its clock is set, so default to UTC
date_default_timezone_set( "UTC" );

// The client is in England where daylight savings may be in effect
$daylight_savings_offset_in_seconds = timezone_offset_get( timezone_open( "BST" ), new DateTime() );

// Do something useful with the number
echo date( "U" ) + $daylight_savings_offset_in_seconds;
skanzow at gmx dot net
3 years ago
A common problem is to format dates and times for XML documents.
The XML standard is defined as follows:

    To specify a time zone, you can either enter a dateTime in UTC time by adding a "Z" behind the time - like this:
    or you can specify an offset from the UTC time by adding a positive or negative time behind the time - like this:

Here is a possible solution in PHP:
if(date_default_timezone_get() == 'UTC') {
$offsetString = 'Z'; // No need to calculate offset, as default timezone is already UTC
} else {
$phpTime = '2002-05-30 09:30:10';
$millis = strtotime($phpTime); // Convert time to milliseconds since 1970, using default timezone
$timezone = new DateTimeZone(date_default_timezone_get()); // Get default system timezone to create a new DateTimeZone object
$offset = $timezone->getOffset(new DateTime($phpTime)); // Offset in seconds to UTC
$offsetHours = round(abs($offset)/3600);
$offsetMinutes = round((abs($offset) - $offsetHours * 3600) / 60);
$offsetString = ($offset < 0 ? '-' : '+')
                . (
$offsetHours < 10 ? '0' : '') . $offsetHours
. ':'
. ($offsetMinutes < 10 ? '0' : '') . $offsetMinutes;
'<startdate>' . date('Y-m-d\TH:i:s', $millis) . $offsetString . '</startdate>'); // This is the correct XML format
To Top