# Send messages in users' time zones

Customer.io aims to help you send the right messages at the right time to your users. Two critical parts of this are sending messages in a given person’s time zone and localizing time in emails. Here, we’ll explain how to do both.

## How it works[](#how-it-works)

You can schedule messages for your users in their time local timezones, so you engage customers at the right times, wherever they are. This feature relies on a `timezone` attribute you set yourself or the `cio_timezone` attribute, which is set by our [automatic geolocation data collection](/journeys/geolocation-data/).

If the `timezone` attribute exists, we’ll use it to send the message in the customer’s time zone. If it doesn’t exist, we’ll use the `cio_timezone` attribute as a fallback. If neither of these attributes exist, we’ll use a fallback timezone. This ensures that people who don’t have timezone data still get messages.

## Use our recommended send time feature[](#use-our-recommended-send-time-feature)

You can use our [recommended send time](/journeys/recommended-send-time/) feature to automatically schedule messages at the best times for your audience.

## Campaigns: schedule a message with a time window[](#campaigns-schedule-a-message-with-a-time-window)

Time zone match is available when using a “Time Window” delay in your workflows:

[![user-timezone.png](https://docs.customer.io/images/user-timezone.png)](#6f7a40f35f766faa5fc0fd2a7304a732-lightbox)

With this setting, you can tell Customer.io to wait until a given time in a customer’s time zone before taking the next action.

You must also set a fallback here, telling Customer.io which time zone to use if a customer doesn’t have the `timezone` attribute.

## Send newsletters in recipients’ timezones[](#send-newsletters-in-your-users-time-zone)

You can [schedule delivery](/journeys/newsletters/#review-schedule) of a newsletter in the *Review* step. Here you have the option to **Send in recipient’s timezone**.

[![Under the date/time of your schedule, you can togggle on the option to send in recipient's timezone.](https://docs.customer.io/images/newsletter_4.png)](#8247e70da79986280a46497652d58971-lightbox)

You must also set a **Fallback Time Zone**, telling Customer.io which time zone to use if a customer doesn’t have the [`timezone` or `cio_timezone` attributes](#how-it-works). If a customer has an invalid value (not empty/missing) for the timezone attribute, they will receive the newsletter during the last date/time we send to across all timezones.

Keep in mind, you cannot send in a recipient’s timezone in these situations:

*   If your newsletter contains variants for A/B tests. If this is important for your company, please email [win@customer.io](mailto:win@customer.io) with your use case!
*   If your newsletter has a *daily* rate limit. This is to ensure your customers receive newsletters in a timely fashion. If you’re sending across multiple timezones with a daily rate limit, it’s possible a significant number of your customers won’t receive this newsletter until days after.

## Use time zone data in messages[](#use-time-zone-data-in-messages)

You can also localize time in your messages using [liquid syntax](/journeys/liquid-tag-list/). Imagine that you want to send an appointment reminder, and you have an `appointment_time` attribute formatted as a UNIX timestamp.

The way you use time zone data in your messages depends on [the liquid version you’re using](/journeys/liquid-upgrade/).

 Latest liquid

#### Latest liquid[](#Latest liquid)

```fallback
{{ customer.appointment_time | date: "%H:%M %A %b %d, %Y", customer.timezone }}
```

 Legacy liquid

#### Legacy liquid[](#Legacy liquid)

```fallback
{{ customer.appointment_time | timezone: customer.timezone | date: "%H:%M %A %b %d, %Y" }}
```

If `customer.timezone` is `US/Pacific`, then the above liquid code will display: 05:00 Friday Oct 28, 2033.