Using WordPress ‘iso8601_timezone_to_offset()’ PHP function

The iso8601_timezone_to_offset() WordPress PHP function takes an ISO 8601 timezone and returns its UTC offset in seconds.

Usage

iso8601_timezone_to_offset( $timezone );

Example:

Input: iso8601_timezone_to_offset("+0200");

Output: 7200

Parameters

  • $timezone (string) – Required. Either ‘Z’ for 0 offset or ‘±hhmm’.

More information

See WordPress Developer Resources: iso8601_timezone_to_offset()

Examples

Convert ISO 8601 timezone to UTC offset

This code snippet converts the given ISO 8601 timezone to its UTC offset in seconds.

$timezone = "+0200";
$offset = iso8601_timezone_to_offset($timezone);
echo $offset; // Output: 7200

Get UTC offset of a datetime object

This code snippet gets the UTC offset in seconds for a given datetime object.

$date = new DateTime("2023-05-05T12:00:00+02:00");
$timezone = $date->format("P");
$offset = iso8601_timezone_to_offset($timezone);
echo $offset; // Output: 7200

Calculate UTC datetime from local datetime and ISO 8601 timezone

This code snippet calculates the UTC datetime based on the local datetime and ISO 8601 timezone.

$local_datetime = "2023-05-05T12:00:00";
$timezone = "+0200";
$offset = iso8601_timezone_to_offset($timezone);

$utc_datetime = strtotime($local_datetime) - $offset;
echo gmdate("Y-m-d\TH:i:s", $utc_datetime); // Output: 2023-05-05T10:00:00

Calculate local datetime from UTC datetime and ISO 8601 timezone

This code snippet calculates the local datetime based on the UTC datetime and ISO 8601 timezone.

$utc_datetime = "2023-05-05T10:00:00";
$timezone = "+0200";
$offset = iso8601_timezone_to_offset($timezone);

$local_datetime = strtotime($utc_datetime) + $offset;
echo gmdate("Y-m-d\TH:i:s", $local_datetime); // Output: 2023-05-05T12:00:00

Compare two datetime objects with different timezones

This code snippet compares two datetime objects with different timezones and checks if they represent the same moment in time.

$date1 = new DateTime("2023-05-05T12:00:00+02:00");
$date2 = new DateTime("2023-05-05T10:00:00Z");

$timezone1 = $date1->format("P");
$offset1 = iso8601_timezone_to_offset($timezone1);

$timezone2 = $date2->format("P");
$offset2 = iso8601_timezone_to_offset($timezone2);

$utc_timestamp1 = strtotime($date1->format("Y-m-d\TH:i:s")) - $offset1;
$utc_timestamp2 = strtotime($date2->format("Y-m-d\TH:i:s")) - $offset2;

if ($utc_timestamp1 === $utc_timestamp2) {
    echo "The datetimes represent the same moment in time.";
} else {
    echo "The datetimes represent different moments in time.";
}