Timezones
WooCommerce Appointments has full timezone support built into every part of the system. Whether your customers, staff, and admins are all in the same city or spread across the world, everyone sees appointment times in their own timezone — and the plugin handles all the conversions behind the scenes.
This page explains how timezones are configured, how they appear across the booking flow, and what the hover tooltips show.
How It Works (The Big Picture)
There are three timezone levels in the system:
| Level | Where it's set | What it does |
|---|---|---|
| Site timezone | WordPress → Settings → General | The "home base" timezone used for availability calculations and fallback display context. |
| Customer timezone | Booking form picker or My Account | Customers see available slots and appointment times in their own timezone. |
| Staff timezone | User Profile → Staff Details | Staff members see their schedule and enter availability rules in their own timezone. |
Every date and time you see in the plugin is automatically converted to the right timezone for the person viewing it. You never have to do timezone math yourself.
Setting Up Timezones
Site (Store) Timezone
Your site timezone is set in WordPress → Settings → General. This is the foundation for availability logic and fallback display behavior across the plugin. Choose the timezone that matches your primary business location.
The Timezone Dropdown
Wherever you pick a timezone in the plugin (staff profile, customer account, booking form), you'll see an enhanced dropdown with:
- City name with abbreviation — e.g.,
New York — ET - Hover tooltip — hover over any option to see the full identifier, e.g.,
Timezone: America/New_York - ET - Default option — shows
Default (ET)(or whatever your site timezone abbreviation is). This option follows the site timezone dynamically, so if your site timezone ever changes, everyone using "Default" updates automatically. - Search — type to quickly find timezones by city name
Browser Detection
On the staff profile and customer My Account pages, a "Use my current timezone" button appears when the browser-detected timezone differs from the currently selected one. One click sets the dropdown to match the browser.
Customer Timezone
Setting a Preference (My Account)

Logged-in customers can save a timezone preference in My Account → Account Details under the Appointment Timezone section:
- Default — follows the site timezone (best for local customers)
- Specific timezone — pick any timezone from the dropdown
The system determines which timezone to use for a customer in this order:
- Posted timezone field from the booking form (
wc_appointments_field_timezone) when present - Saved preference in My Account (
wc_appointments_timezoneuser meta) for logged-in users display_timezonevalue sent by the date picker AJAX flow- Session cookie from the booking form timezone picker (
appointments_time_zone) - Site timezone (final fallback)
Most customers don't need to change anything. The booking form auto-detects their browser timezone and uses it automatically.
On the Booking Form
For time-based products (minute or hour duration), a selection info row appears between the calendar and the time slots:
- The right side shows the current timezone abbreviation (e.g.,
ET) as a clickable link - Clicking it opens the full timezone dropdown so the customer can switch timezones
- All time slots are automatically converted to the selected timezone
When the customer picks a different timezone than the site, times shift accordingly. For example, if your site is in CET (Berlin) and the customer switches to ET (New York), a slot at 15:00 CET shows as 9:00 AM ET.
For logged-in users (including staff/managers booking on storefront flows), changing timezone from the booking form also updates their wc_appointments_timezone user meta in 5.3.0.
In the Cart and Checkout
After adding an appointment to the cart, the order summary shows the appointment date and time. If the customer's timezone differs from the site timezone, a timezone abbreviation appears next to the date (e.g., ET) so the customer can confirm the time is in their timezone.
In My Account → Appointments
The My Account → Appointments table shows the "When" column with the appointment date and time. When the customer has a timezone that differs from the site timezone, a timezone abbreviation is shown next to the time so there's no confusion about which timezone the displayed time is in.
Staff Timezone
Setting a Staff Timezone

Staff members (or admins editing a staff user) can set their timezone in Users → Profile under Staff Details → Timezone:
- Select a timezone from the dropdown, or keep Default to use the site timezone
- If the browser timezone differs, click "Use my current timezone" for a quick setup
Availability Rules in Staff's Timezone
When a staff member has a different timezone from the site:
- A note appears above the availability rules table: "Times are shown in timezone: CET"
- Staff enter their rules in their own local time — e.g., "Available Monday 9:00–17:00" means 9 AM to 5 PM in the staff member's timezone
- When saved, the plugin automatically converts those times to the site timezone for storage
- Customers on the booking form see the correct slots in their timezone, after the double conversion (staff → site → customer)
Staff always work in their own local time. The system handles all conversions transparently.
Where Timezones Appear (The Full Picture)
1. Admin Calendar — View Appointment Modal
When you click an appointment on the admin calendar, the detail modal shows timezone information in the Customer section:
- A timezone label appears next to the customer's name, showing their timezone city and abbreviation — e.g.,
New York (ET) - Hover over it to see a rich tooltip with:
- The customer's timezone name
- The appointment time converted to the customer's local time
- The offset difference relative to you — e.g., "New York (ET) — Jan 15, 2:00 PM (6h behind)"
This tells you at a glance: "The customer is in New York, for them it's 2 PM, and they're 6 hours behind me."
The offset is always relative to your timezone (the admin or staff member viewing the calendar), not the site timezone. So if you're a staff member in Tokyo viewing an appointment for a customer in New York, it shows the difference between Tokyo and New York.
The timezone label only appears when the customer's timezone differs from yours. If you're in the same timezone as the customer, there's nothing to show.
2. Appointment Edit Screen (Meta Box)
When editing an appointment in wp-admin → Appointments → Edit:
- The Date/Time heading shows your timezone abbreviation (e.g.,
CET) with a hover tooltip showing the full identifier. The date and time fields are displayed and editable in your timezone (the logged-in admin/staff timezone). - The Staff label shows timezone abbreviations for each assigned staff member when their timezone differs from yours. Hover for the full tooltip with their local time and offset.
- A Customer's Timezone row appears below the date fields when the customer is in a different timezone. It shows the customer's timezone city and abbreviation (e.g.,
New York (ET)) with a hover tooltip showing the appointment time in their local time and the offset difference. - If the appointment was originally booked in a different timezone than the customer's current account timezone (e.g., the customer changed their timezone preference after booking), a Booking Timezone row also appears to show the original booking timezone.
3. Email Notifications
All email notifications are timezone-aware:
Admin/staff emails (New Appointment, Cancelled, Rescheduled):
- The Appointment Date is shown in the recipient's timezone. If an email goes to a staff member in Tokyo, the date shows Tokyo time. If it goes to the site admin, it shows the site timezone.
- A Customer's Timezone row appears in the email when the customer's timezone differs from the recipient's. It shows the customer's timezone city and abbreviation (e.g.,
New York (ET)), with the same context format as the admin views. - A Staff timezone abbreviation appears next to the staff member's name when the staff timezone differs from the recipient's.
Customer emails (Confirmed, Reminder, Cancelled, Follow-up):
- Dates are shown in the customer's timezone so they always see times that match their local clock.
When an appointment has multiple staff members in different timezones, the system groups email recipients by timezone and sends each group an email with dates in their own timezone. Everyone sees the correct local time.
4. Order Details (After Checkout & Order Emails)
The appointment summary that appears:
- On the thank-you page after checkout
- In order confirmation emails
- In My Account → Orders when viewing an order
- In the admin order view
Shows these timezone-aware fields:
- When — the appointment date and time, with a timezone abbreviation appended when the viewer's timezone differs from the site
- Staff — staff name(s) with timezone abbreviation(s) when the staff timezone differs from the viewer
- Customer's Timezone — (admin context only) shows the customer's timezone when it differs from the viewer, so admins can see where the customer is located
5. My Account → Appointments List
The appointments table shows the When column with a timezone abbreviation when the customer's timezone differs from the site timezone. This appears for time-based appointments (minute/hour duration) but not for day or month-based appointments where the time component doesn't apply.
6. Admin Appointments List Table
The When column in the admin list table shows a timezone abbreviation when the appointment time differs from the admin user's timezone. This helps admins quickly spot cross-timezone appointments.
7. Admin Calendar — Unavailable Rules Overlay
In the calendar's Week and Day views, unavailable time blocks from availability rules are automatically converted to the staff member's timezone when viewing through a staff filter. This means the blocked-out times on the calendar grid match what the staff member configured in their own local time.
The Hover Tooltip (What You See on Hover)
Throughout the admin, timezone information is shown as compact abbreviations (e.g., New York (ET)) that reveal more details on hover. Here's what the tooltip shows depending on the context:
| Where | Visible text | Hover tooltip |
|---|---|---|
| Timezone dropdown options | New York — ET | Timezone: America/New_York - ET |
| Date/Time heading (meta box) | CET | Timezone: Europe/Berlin - CET |
| Customer timezone (calendar modal, meta box, emails) | New York (ET) | New York (ET) — Jan 15, 2:00 PM (6h behind) |
| Staff timezone (meta box, emails) | Tokyo (JST) | Tokyo (JST) — Jan 16, 12:00 AM (8h ahead) |
| Timezone indicator (list tables, order summary) | ET | Timezone: America/New_York - ET |
The customer and staff timezone tooltips are the most useful — they show you three things in one glance:
- Where the person is (city and abbreviation)
- When the appointment is in their local time (full date and time)
- How far they are from you (offset like "6h behind" or "4h 30min ahead")
The offset is always calculated relative to you (the person viewing), not the site timezone. Half-hour offsets (like India's UTC+5:30) are shown correctly as "4h 30min ahead."
The Booking Flow (End to End)
Here's what happens with timezones during a complete booking:
- Customer visits the booking form — the form auto-detects their browser timezone (e.g.,
America/New_York) and sets a session cookie - Customer sees available slots — all times are converted from the site timezone to their local timezone. A 15:00 CET slot appears as 9:00 AM ET.
- Customer picks a slot and adds to cart — the selected time is converted back to the site timezone for storage. The cart shows the time in the customer's timezone with an abbreviation.
- Customer completes checkout — the appointment is created with the time stored in the site timezone. The customer's timezone is recorded as metadata.
- Admin receives the New Appointment email — the email shows the appointment date in the admin's timezone, with the customer's timezone row showing "New York (ET)" and a hover tooltip with the customer's local time.
- Staff member opens the admin calendar — they see the appointment at the correct time in their own timezone. Clicking it shows the customer's timezone in the detail modal with the hover tooltip.
- Customer checks My Account — they see the appointment time in their own timezone.
At every step, everyone sees the appointment time in their own timezone. No one needs to do any math.
Creation Timezone Metadata
When an appointment is created, the plugin records the site timezone at that moment as metadata (_creation_tz). This ensures accurate timezone conversion even if the site timezone is changed later, and handles DST transitions correctly (e.g., an appointment booked during summer time is still displayed correctly in winter).
Disabling Timezone Display
If your business only serves customers in one timezone (e.g., a local hair salon), you can hide all timezone UI so nobody sees timezone abbreviations or pickers. Use the woocommerce_appointments_show_timezone filter:
add_filter( 'woocommerce_appointments_show_timezone', '__return_false', 10, 3 );
When disabled:
- Frontend: No timezone picker on the booking form, no timezone abbreviations in the cart, My Account, or next to dates.
- Admin: No timezone section in user/staff profiles, no timezone abbreviations in list tables, meta boxes, or the calendar modal.
- Emails: Dates are shown without timezone abbreviations.
You can also disable selectively (frontend only, admin only, or for specific users). See Hooks & Filters — woocommerce_appointments_show_timezone for parameters and examples.
Google Calendar sync always uses the WordPress site timezone when sending events to the Google API. This works correctly regardless of the woocommerce_appointments_show_timezone filter — the same moment in time is always synced. For the best experience, set your connected Google Calendar's timezone to match the site timezone so events display at the expected clock time.