DateTimeZone::getOffset

timezone_offset_get

(PHP 5 >= 5.2.0)

DateTimeZone::getOffset -- timezone_offset_getReturns the timezone offset from GMT

Descrizione

Stile orientato agli oggetti

public int DateTimeZone::getOffset ( DateTime $datetime )

Stile procedurale

int timezone_offset_get ( DateTimeZone $object , DateTime $datetime )

This function returns the offset to GMT for the date/time specified in the datetime parameter. The GMT offset is calculated with the timezone information contained in the DateTimeZone object being used.

Elenco dei parametri

oggetto

Solo per lo stile procedurale: Un oggetto DateTimeZone restituito da timezone_open()

datetime

DateTime that contains the date/time to compute the offset from.

Valori restituiti

Returns time zone offset in seconds on success o FALSE in caso di fallimento.

Esempi

Example #1 DateTimeZone::getOffset() examples

<?php
// Create two timezone objects, one for Taipei (Taiwan) and one for
// Tokyo (Japan)
$dateTimeZoneTaipei = new DateTimeZone("Asia/Taipei");
$dateTimeZoneJapan = new DateTimeZone("Asia/Tokyo");

// Create two DateTime objects that will contain the same Unix timestamp, but
// have different timezones attached to them.
$dateTimeTaipei = new DateTime("now"$dateTimeZoneTaipei);
$dateTimeJapan = new DateTime("now"$dateTimeZoneJapan);

// Calculate the GMT offset for the date/time contained in the $dateTimeTaipei
// object, but using the timezone rules as defined for Tokyo
// ($dateTimeZoneJapan).
$timeOffset $dateTimeZoneJapan->getOffset($dateTimeTaipei);

// Should show int(32400) (for dates after Sat Sep 8 01:00:00 1951 JST).
var_dump($timeOffset);
?>

add a note add a note

User Contributed Notes 1 note

up
1
skanzow at gmx dot net
2 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:
    <startdate>2002-05-30T09:30:10Z</startdate>
    or you can specify an offset from the UTC time by adding a positive or negative time behind the time - like this:
    <startdate>2002-05-30T09:30:10-06:00</startdate>
"

Here is a possible solution in PHP:
<?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;
}
echo(
'<startdate>' . date('Y-m-d\TH:i:s', $millis) . $offsetString . '</startdate>'); // This is the correct XML format
?>
To Top