Time Zone Selector

A dropdown of all ~590 IANA time zones grouped by region (Africa, America, Asia, etc.). Displays the UTC offset alongside each zone name so editors can find the right zone quickly. Can return the IANA string, the UTC offset, or a full object.

Pro field

Time Zone Selector requires the Extra Fields for ACF Pro license.

Settings

SettingDefaultDescription
Default Timezone(empty)IANA timezone pre-selected when the field loads, e.g. Asia/Dhaka.
Show UTC OffsettrueDisplay the UTC offset beside each timezone name in the dropdown.
Filter Region(none)Limit the dropdown to zones from one region: Africa, America, Asia, Atlantic, Australia, Europe, Pacific, or UTC.
Return Formatianaiana · offset · object

Return values

return_format: 'iana'

Returns the IANA timezone identifier string.

$tz = get_field('user_timezone');
// "Asia/Dhaka"
// "America/New_York"
// "Europe/London"

return_format: 'offset'

Returns the UTC offset string.

$offset = get_field('event_timezone');
// "+06:00"
// "-05:00"
// "+00:00"

return_format: 'object'

Returns an associative array with iana, offset, and label.

$tz = get_field('event_timezone');
// [
//   'iana'   => 'America/New_York',
//   'offset' => '-05:00',
//   'label'  => 'America/New_York (UTC-05:00)',
// ]

Usage

Converting a stored date to the user’s timezone

$iana_tz    = get_field('event_timezone'); // "America/New_York"
$event_time = get_field('event_datetime'); // "2026-06-15 14:30:00" (stored as UTC)

if ($iana_tz && $event_time) {
    $dt = new DateTime($event_time, new DateTimeZone('UTC'));
    $dt->setTimezone(new DateTimeZone($iana_tz));

    echo '<time datetime="' . esc_attr($dt->format('c')) . '">';
    echo esc_html($dt->format('F j, Y g:i A T'));
    echo '</time>';
    // "June 15, 2026 10:30 AM EDT"
}

Displaying the offset

$offset = get_field('branch_timezone'); // return_format: 'offset'
if ($offset) {
    echo '<p>Local time zone: UTC' . esc_html($offset) . '</p>';
}

Scheduling a cron in the user’s timezone

$iana_tz = get_field('notification_timezone', $user_id);

if ($iana_tz) {
    $tz   = new DateTimeZone($iana_tz);
    $dt   = new DateTime('09:00', $tz); // 9 AM local
    $dt->setTimezone(new DateTimeZone('UTC'));

    // Schedule event at the UTC equivalent
    wp_schedule_event($dt->getTimestamp(), 'daily', 'send_daily_digest');
}

Listing all upcoming events in the viewer’s local time

$viewer_tz = get_field('timezone', get_current_user_id()) ?: 'UTC';

$events = get_posts(['post_type' => 'event', 'posts_per_page' => 10]);

foreach ($events as $event) {
    $utc_time = get_field('event_time', $event->ID);
    if (!$utc_time) continue;

    $dt = new DateTime($utc_time, new DateTimeZone('UTC'));
    $dt->setTimezone(new DateTimeZone($viewer_tz));
    echo esc_html($event->post_title . ' — ' . $dt->format('D g:i A'));
}