Free tool Business hours template generator for websites and support teams
Your hours live in too many places: the contact page, the structured data Google reads, the chat widget’s offline message and the holiday notice. Type the weekly schedule and any holiday exceptions in plain words, pick your time zone, and get all of them from one source, plus a table of what those hours mean for customers in other time zones this week.
- schema.org JSON-LD
- Time zones with daylight saving
- Runs locally
Enter your hours
Write one rule per line. Later lines override earlier ones for the same day, so “Mon-Sun 9-17” followed by “Sun closed” works.
Examples: Mon-Fri 09:00-18:00, Sat 10am-2pm, Sun closed, Weekdays 9:00-12:00, 13:00-17:30, Fri 18:00-02:00 (past midnight), Daily 24h. Days not listed count as closed.
One date or range per line: 2026-12-25 closed Christmas Day, 2026-12-24 09:00-13:00, 2026-12-31 to 2027-01-01 closed. Text after the hours is the label.
The hours above are local time here. JSON-LD has no time zone field; search engines read opens / closes as the business’s local time.
For the website copy, offline message and holiday notice.
Defaults to your own time zone when it differs from the business’s.
Any date in that week (YYYY-MM-DD). Empty = this week. Conversions change when daylight saving starts or ends.
“Organization → customer service contact” puts the hours on a ContactPoint (hoursAvailable), for support lines and chat without a physical location.
Google’s local business documentation shows date-limited entries with validFrom / validThrough inside openingHoursSpecification; schema.org also defines specialOpeningHoursSpecification, which overrides the regular hours. ContactPoint always uses validFrom / validThrough.
Right now
Closed now — opens 09:00 US Eastern time
Recalculated each time the page loads, including today’s holiday exception.
Checks
Input problems by line, and how the schedule maps to TapCub live chat working hours.
- CheckTapCub live chat working hours use one start and end time for all selected days, and these hours differ by day. Choose the window to cover (for example 09:00–18:00); outside it visitors see the offline form, and the offline message below can list the full schedule.
- NoteTapCub live chat has no holiday calendar for working hours. On holidays set agents offline (visitors then get the offline form) and paste the holiday notice into the offline text.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "LocalBusiness",
"name": "Northwind",
"url": "https://www.example.com",
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": [
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday"
],
"opens": "09:00",
"closes": "18:00"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": "Saturday",
"opens": "10:00",
"closes": "14:00"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": "Sunday",
"opens": "00:00",
"closes": "00:00"
},
{
"@type": "OpeningHoursSpecification",
"opens": "09:00",
"closes": "13:00",
"validFrom": "2026-12-24",
"validThrough": "2026-12-24"
},
{
"@type": "OpeningHoursSpecification",
"opens": "00:00",
"closes": "00:00",
"validFrom": "2026-12-25",
"validThrough": "2026-12-25"
},
{
"@type": "OpeningHoursSpecification",
"opens": "00:00",
"closes": "00:00",
"validFrom": "2027-01-01",
"validThrough": "2027-01-01"
}
]
}
</script>Paste into the page’s HTML, or merge the hours into your existing LocalBusiness / Organization markup. Google’s local business result also needs name and address.
Hours in other time zones
The same hours as they fall on customers’ clocks. A day shift is shown with the weekday.
| Day | US Eastern time | London time | Singapore time (UTC+8) |
|---|---|---|---|
| Mon | 09:00–18:00 | Mon 14:00–23:00 | Mon 22:00 – Tue 07:00 |
| Tue | 09:00–18:00 | Tue 14:00–23:00 | Tue 22:00 – Wed 07:00 |
| Wed | 09:00–18:00 | Wed 14:00–23:00 | Wed 22:00 – Thu 07:00 |
| Thu | 09:00–18:00 | Thu 14:00–23:00 | Thu 22:00 – Fri 07:00 |
| Fri | 09:00–18:00 | Fri 14:00–23:00 | Fri 22:00 – Sat 07:00 |
| Sat | 10:00–14:00 | Sat 15:00–19:00 | Sat 23:00 – Sun 03:00 |
| Sun | Closed | — | — |
Converted for the week starting Monday 2026-11-09.
Mon–Fri: 09:00–18:00
Sat: 10:00–14:00
Sun: Closed
All times are US Eastern time.
Holiday hours:
- Dec 24 (Christmas Eve): open 09:00–13:00
- Dec 25 (Christmas Day): closed
- Jan 1 (New Year’s Day): closedFor a contact page or footer. Consecutive days with the same hours are grouped.
We’re offline right now. Our team is available Mon–Fri 09:00–18:00, Sat 10:00–14:00 US Eastern time, which is 14:00–23:00 London time. Leave a message with your email and we’ll reply as soon as we’re back.For the offline text of your chat widget or a messaging app away message.
Holiday hours: Dec 24 (Christmas Eve): open 09:00–13:00; Dec 25 (Christmas Day): closed; Jan 1 (New Year’s Day): closed. Messages left in the chat during these times will be answered when we’re back.For a banner, an email or the offline text during the holiday period.
Share these inputs: the values go after the # in the link, so they never reach a server.
https://tapcub.com/tools/business-hours-generator
Version v1.0Updated Update history
One schedule, five places it is used
All outputs come from the same lines, so they cannot disagree with each other.
JSON-LD
Structured data that tells search engines your hours. Days with the same hours are grouped into one OpeningHoursSpecification; closed days are written as 00:00–00:00 and 24-hour days as 00:00–23:59, the forms shown in Google’s documentation. Holiday exceptions carry validFrom and validThrough dates.
Time zone table
Each range is converted on the actual dates of the chosen week, so daylight saving is applied correctly. When the range crosses midnight on the customer’s clock, both weekdays are shown, for example “Sun 21:00 – Mon 06:00”.
Website copy and offline message
The copy lists every day; the offline message lists only the open days and, if you chose another time zone, what the main window means there. Both name the time zone, because “9–6” alone is ambiguous for visitors abroad.
Checks
Errors point to the line to fix. The TapCub note says whether the schedule fits the live chat working-hours setting as it is, or what to choose if it does not.
The “right now” line uses your device’s clock, so it is always current when you open the page.
Publish your hours in four places
Update the lines here whenever your hours change, then copy each output to where it belongs.
-
1
Write the weekly hours
One line per rule, in 24-hour or am/pm time. Add a second range after a comma for a lunch break; a closing time earlier than the opening time means past midnight.
-
2
Add holiday exceptions
A date or a date range, “closed” or special hours, and a label. Remove them after the holiday so the structured data does not keep old dates.
-
3
Copy JSON-LD and the website text
Add the JSON-LD to your contact or location page and check it with Google’s Rich Results Test. Use the copy on the same page so the visible hours match the markup.
-
4
Set up the chat widget
Paste the offline message into your chat tool, set its working hours from the TapCub note, and swap in the holiday notice before each holiday.
How the hours are written in structured data
schema.org defines the properties; Google’s local business documentation shows how it expects the special cases.
dayOfWeekuses English day names; Google accepts the short form without the schema.org URL (“Monday”).opens/closesare local times of the business. A closing time earlier than the opening time spans into the next day (schema.org), so Friday 18:00–02:00 is one entry.- Open 24 hours: opens 00:00, closes 23:59. Closed all day: opens and closes 00:00 (both from Google’s documentation).
- Holidays: an entry with
validFromandvalidThrough; or, per schema.org,specialOpeningHoursSpecification, which overrides the regular hours. A ContactPoint lists its hours inhoursAvailable.
| Line | JSON-LD |
|---|---|
| Mon-Fri 09:00-18:00 | dayOfWeek: Monday … Friday, opens 09:00, closes 18:00 |
| Fri 18:00-02:00 | dayOfWeek: Friday, opens 18:00, closes 02:00 |
| Daily 24h | all seven days, opens 00:00, closes 23:59 |
| Sun closed | dayOfWeek: Sunday, opens 00:00, closes 00:00 |
| 2026-12-25 closed | opens 00:00, closes 00:00, validFrom / validThrough 2026-12-25 |
A New York support team, seen from London and Singapore
Monday to Friday 09:00–18:00 and Saturday 10:00–14:00 New York time, converted for the week of 9 November 2026 (after the US clocks went back on 1 November).
| Day (New York) | New York | London | Singapore (UTC+8) |
|---|---|---|---|
| Mon–Fri | 09:00–18:00 | 14:00–23:00 same day | 22:00 – 07:00 next day |
| Sat | 10:00–14:00 | 15:00–19:00 | Sat 23:00 – Sun 03:00 |
| Sun | Closed | — | — |
In the week of 16 March 2026, New York was already on summer time and London was not yet, so the London column read 13:00–22:00. That is why the table converts a specific week.
Hours that confuse customers and search engines
Most problems come from hours that are correct in one place and stale in another.
No time zone
“Support 9–6” means nothing to a customer eight hours away. Name the time zone in the visible text; the structured data is always local time.
Old holiday dates left in markup
A Christmas closure still in the JSON-LD in March is at best ignored. Remove exceptions once they are over.
Splitting overnight hours
Writing Friday 18:00–24:00 and Saturday 00:00–02:00 as two entries is unnecessary: one entry with closes earlier than opens means past midnight.
Chat promises nobody keeps
If the widget says “online” outside staffed hours, visitors wait for a reply that never comes. Match the chat working hours to the real schedule and show the offline form outside them.
Working hours in TapCub live chat
The schedule you write here is the one to set in TapCub, and the offline message is written for its offline form.
Working hours per site
Set a time zone, the days and the hours. Outside them the widget collects a message and an email instead of showing agents online.
Learn moreHours and status per agent
Each agent has working hours and an online status; threads are routed to agents who are online.
Learn moreAI replies while everyone is offline
One AI mode answers from your knowledge base only while all agents are offline, then hands over to the team.
Learn moreBusiness hours questions
Still have a question?
Chat with the team behind TapCub — we usually reply within a few hours on business days.
How do I add business hours to structured data?
Use openingHoursSpecification on a LocalBusiness (or one of its subtypes such as Store or Restaurant): one entry per group of days with the same opens and closes times. For a support line without a physical location, put the same entries in hoursAvailable on a ContactPoint. This tool writes both.
How do I mark a day as closed or open 24 hours?
Google’s local business documentation sets opens and closes to 00:00 for a day that is closed all day, and opens 00:00 with closes 23:59 for 24 hours. This tool writes closed days that way rather than leaving them out, so the markup states every day explicitly.
How do I show holiday hours?
Add an entry limited by validFrom and validThrough dates, with 00:00–00:00 for a closure or the special hours otherwise. schema.org also has specialOpeningHoursSpecification for hours that override the regular ones; pick either form in the tool.
What about hours past midnight?
Write the closing time as it is: “Fri 18:00-02:00”. In schema.org a closing time earlier than the opening time spans into the next day, and Google’s documentation shows the same single-entry form.
Which time zone do opens and closes use?
The business’s local time. OpeningHoursSpecification has no time zone field; search engines combine it with the business location. Write the time zone in the visible text for visitors abroad.
How do I show support hours to customers in other countries?
Pick up to two extra time zones. The table converts each day on real dates, so daylight saving changes are applied, and the offline message can include what your main window means in the first one.
Does TapCub live chat support holiday hours?
Not as a calendar. Working hours are one time zone, a set of days and one daily window. On holidays, set agents offline so visitors get the offline form, and put the holiday notice in the offline text.
Update history
New features, fixes and data refreshes for this tool, newest first.
-
· v1.0
LaunchedFirst release.
Missing something or found an error? Tell us — requests that come up often go into the next update. All tool updates
Let the chat widget follow your hours
TapCub live chat shows agents online during working hours and an offline form outside them, with every message in the same inbox.