The sale ends at midnight. A shopper in Los Angeles opens the page at four in the afternoon and sees a timer that already expired. Another in Sydney sees fourteen hours remaining on a sale that has three.
A countdown timer timezone problem is not a display bug. It is one deadline being communicated as several different moments, and it produces the worst possible outcome for an urgency mechanic: a store that appears to be making promises it does not keep, to precisely the customers who are hardest to reach.
Where does the wrong time come from?
Three distinct sources, and the fix differs for each.
- The device clock. Apps that render a countdown from the browser's local time inherit whatever the shopper's device says. A phone set five minutes fast shows a different deadline. A device with the wrong timezone shows a wildly different one.
- The store timezone applied globally. The opposite failure. The deadline is correct in your admin's timezone and simply wrong for anyone who does not live there.
- Wall-clock storage. A deadline saved as "23:59 on the 30th" rather than as an absolute instant is ambiguous the moment daylight saving moves, and ambiguous permanently across markets.
The first is the most common and the hardest to notice, because your own device is almost certainly set correctly.
Which of the three do you have?
Ten minutes of testing tells you.
- Open the product page and note the remaining time.
- Change your computer's timezone to somewhere several hours away and reload.
- If the remaining time changed, the app is rendering from the device clock. That is source one.
- If it did not change, set your clock forward by twenty minutes and reload.
- If the remaining time dropped by twenty minutes, it is still device-derived, just via the clock rather than the zone.
- If neither changes anything, the deadline is resolved server-side. Now check whether it is the right server-side moment for an international customer.
- Ask someone abroad to load it and send you a screenshot. This is the only test that covers markets, caching and their real device together.
Step seven is worth the friction. Every other check runs on your own machine, and your own machine is the one environment guaranteed to be configured the way you expect.
How should a deadline be stored?
As an absolute instant, in UTC, converted only at the point of display.
| Approach | What breaks |
|---|---|
| Store local wall-clock time | Daylight saving moves it by an hour; meaningless across markets |
| Store store-timezone time | Correct for you, wrong for every other market |
| Render from device clock | Every device with a drifted or misconfigured clock disagrees |
| Store UTC, convert on display | Nothing. This is the correct answer |
The last row is not a preference. A deadline is a moment in time, and a moment in time has exactly one representation that is unambiguous everywhere. Everything else is that moment plus an assumption about where the reader is standing.
Should the sale end at one moment or at local midnight?
A real decision, not a technicality, and both answers are defensible.
One global moment is simpler. The sale ends when it ends, everyone gets the same remaining time converted to their own clock, and you can prove exactly when the price changed. It is easier to support and easier to plan stock against. The cost is that customers in some timezones get an awkward hour, and someone in Japan may find the sale ending mid-morning.
Local midnight feels fairer to each customer and is what most people assume when they read "ends midnight". The costs are real though. The sale runs for more than a day in total, so stock planning has to account for the tail, and a price that is different in two markets at the same instant is harder to defend if anyone compares.
Whichever you pick, state it on the page. "Ends 23:59 GMT" is a fact. "Ends midnight" is a fact plus an assumption, and the assumption is wrong for most of the world.
What should the page actually say?
Small wording changes remove most of the complaints.
- Name the zone, or convert it. "Ends 23:59 GMT" or "Ends 15:59 your time". Either is fine. An unqualified time is not.
- Show the date, not just the clock. "2 days 4 hours" is fine as a countdown. Somewhere on the page there should also be an actual date.
- Do not rely on the countdown alone for a hard deadline. A shipping cutoff for a named occasion should say the date in words, because the customer may be planning around it days ahead.
- Be careful with email. A timer image in an email is a snapshot rendered when the message was opened, which may be days after it was sent. Use a date in the copy, not just a graphic.
That last one catches campaigns regularly. The email says four hours remain because the image rendered at open time, the customer opens it on Thursday, and the sale ended Tuesday.
What about dispatch cutoffs specifically?
The daily cutoff is the most useful recurring timer a store can run, and it is also the one where timezone handling matters most, because it fires every single day rather than a few times a year.
The cutoff is a fact about your warehouse, so it is anchored to your warehouse's timezone, not the customer's. A shopper in another country needs to see it converted: "Order within 3h 12m for dispatch today" is correct everywhere, because the remaining duration is timezone-independent even though the underlying cutoff is not.
That is why a duration reads better than a time for this specific mechanic. "Dispatch cutoff 4pm" requires the reader to know whose 4pm. "Order within 3h 12m" does not require them to know anything.
Related mechanics have the same property. A low stock alert is a fact about quantity rather than time, so it sidesteps this problem entirely, which is one small argument for it in a heavily international store.
Why does this go unnoticed for so long?
Because every person capable of spotting it is looking at the one screen where it does not happen.
You configure the sale in your own admin, in your own timezone, on a device whose clock is correct. Your developer does the same. Your agency does the same. The storefront looks right to all of you, repeatedly, and it will keep looking right for as long as nobody in a different timezone is asked.
The customers who see the broken version rarely report it either. From their side there is no bug to describe. They see a sale that already ended, so they close the tab. Nobody writes in to say "your countdown appeared to have expired", because from the outside that is not a fault, it is just a sale they missed.
So the failure produces no signal. No error, no ticket, no anomaly in your dashboard beyond a market that quietly underperforms. Stores discover it by accident, usually when a colleague travelling abroad mentions in passing that the site looked odd.
The defence is to make one specific check part of launching any timed promotion: have somebody outside your timezone load the page and screenshot it. It takes them a minute and it is the only test that covers their real device, their real network and their real location at once.
What should you check before the next sale?
A short pre-flight, worth running once per campaign rather than once per year.
- Confirm the deadline is stored as an absolute instant, not a wall-clock string.
- Load the page with your device timezone changed and confirm the remaining time is stable.
- Check the deadline does not fall on a clock-change weekend in any market you sell to.
- Confirm the page names the zone or converts to local.
- Have someone in your largest overseas market load it and screenshot what they see.
- Check any email creative states a date, not only a rendered countdown.
Five minutes each, and between them they eliminate every failure described above.
Where does Edge Timer fit?
Edge Timer is ours and it is new, with no reviews yet, which is worth weighing when the thing you are buying has to be right on a specific date.
The relevant design choice is that deadlines are stored as a real date and time and resolved server-side. A shopper's device clock, timezone or location cannot change the remaining time they are shown, which removes the first and third sources of error in the table above entirely. Whether the sale should end at one global moment or at local midnight remains your call, because that is a commercial decision rather than a technical one.
It will not stop you setting a deadline on a clock-change weekend. Nothing will, except knowing to check.
Questions people ask next
Should a sale end at the same moment everywhere, or at local midnight?
Pick one deliberately and say which on the page. A single global moment is simpler, provable and easier to support. Local midnight feels fairer to each customer but means the sale runs for over a day in total, which affects stock planning and makes any price comparison harder to defend.
Why does my timer show a different time on my phone than my laptop?
Because the app is rendering from the device clock rather than from the server. Any device with a manually set or drifted clock shows a different deadline, and you have no control over that. A server-resolved deadline shows the same remaining time on every device.
How does daylight saving affect a countdown?
It can move a deadline by an hour if the end time is stored as a local wall-clock time rather than an absolute instant. Store deadlines in UTC and convert for display. A sale ending at 23:59 local on a clock-change weekend is genuinely ambiguous otherwise.
Do I need to show the timezone next to the deadline?
If you sell internationally, yes. Ends 23:59 is not a fact, it is a fact plus an assumption. Naming the zone, or showing the deadline converted to the reader's local time, removes an entire category of complaint from your support inbox.
Anurag Chandra
Founder, Edgecoms
Anurag runs Edgecoms, a studio of Shopify apps. He spends most of his week inside merchant stores working out why a number is lower than it should be.
Connect on LinkedInRead this on your assistant
Opens with a summary request for this page already written.