# Date & Time (business hours)

Route the run down an Open or a Closed path depending on business hours or a date range, checked the instant the step runs, with no branch treated as a dead end.

## Getting here

**Automate → Workflows**, open a workflow, click **+** on the canvas, then pick **Date & Time (business hours)** under **Add Steps**.

## Before you start

- An **owner**, **admin** or **agent** can add this step and save the workflow. Publishing it is an **owner** or **admin** action.
- Building and running workflows depends on your plan; see [pricing](/pricing).
- Nothing outside Inchat has to be connected. Using the workspace's shared business hours needs them set once in **Settings → General**.

## Set up

1. Open the workflow and click **+** where the check belongs.
2. Pick **Date & Time (business hours)**.
3. Under **Check**, choose **Business hours** or **Date range**.
4. For Business hours: tick **Use the workspace business hours** to share the hours set in **Settings → General**, or untick it and set this step's own hours per day and a **Time zone**.
5. For Date range: set a **Start** and an **End**.
6. Choose **is within** or **is not within** to decide which side counts as passing.
7. Add at least one step to the **Open** path; the **Closed** path may be left empty.
8. Save the step, then publish the workflow.

## Fields

| Field | What it means | Default | Limits |
| --- | --- | --- | --- |
| Check | Whether the step tests business hours or a fixed date range. | — | — |
| Use the workspace business hours | Shares the hours set once in Settings → General, so every step using it moves together when those hours change. | — | Untick it to give this step its own hours and time zone instead. |
| Time zone | The IANA time zone the check runs in. | Asia/Kuala_Lumpur | — |
| Start / End | The date range being checked, in Date range mode. | — | Both are required together, and saving through this step's own drawer refuses an End set before Start. A workflow built by the AI Workflow Builder is not protected by that same check — see Limits. |
| Match | **is within** treats the range or hours as the passing case; **is not within** treats being outside them as passing. | — | — |

## How it works

- The check runs the instant the step is reached — it does not wait or poll, it evaluates once and immediately continues down the **Open** path (the check passed) or the **Closed** path (it did not).
- A step using the workspace's shared hours reads them live from **Settings → General** the first time it is needed, then reuses that same reading for the rest of that uninterrupted run — so an edit to the workspace's hours does not change an answer already read earlier in the same, still-running pass. A run that suspends at a **Wait** and later resumes reads the hours fresh again on resume, since the resumed continuation is its own fresh pass.
- After either path finishes, the run continues to whatever comes after the Date & Time step on the canvas — an empty **Closed** path does not end the workflow, it simply has nothing extra to do before falling through.
- If the check itself cannot be evaluated (for example, corrupted hours data), it is treated as **Closed** rather than stopping the run.

## When it fails

- The step itself does not fail in the sense of an error shown to the operator — every run of it records as succeeded, having taken either the Open or the Closed path.
- Saving through the drawer is refused without a time zone, without at least one action on the Open path, with a date range missing one end, or with an End before Start.

## Limits

- It never suspends the run to wait for hours to open — it is a same-instant check, not a hold. Use **Wait** with its own "only continue during business hours" option to actually delay a message until the workspace opens.
- A step sharing the workspace's hours can answer differently within the same uninterrupted run than a fresh run started moments later, right after a **Settings → General** edit — the running one keeps its first reading only until that run next suspends at a **Wait**; the resumed continuation reads the hours fresh again, same as a brand-new run.
- There is no workspace-wide "exit conditions" toggle that this step interacts with — business hours here is purely what this one step (or the workspace hours it optionally shares) checks, not a global auto-stop.
- The drawer's own End-before-Start check is not repeated at every layer: a date range built by the AI Workflow Builder can save with an End before Start. That is not an error at run time either — the range simply never matches (the step always takes Closed, or always Open under **is not within**), rather than failing or warning anyone.

## Best practices

- Use this step to route a reply differently inside and outside business hours; use a **Wait** step's own business-hours hold when the goal is instead to delay a customer message until the workspace opens.
- Share the workspace's hours unless this particular check genuinely needs its own — a step with its own hours is easy to forget when the workspace's real hours change.

## Use cases

- Outside business hours, the Closed path sends a message saying when the team is back; inside them, the Open path assigns the conversation to whoever is free.
- A promotion only applies during a fixed date range; the step checks **is within** that range before applying a tag.

## FAQ and troubleshooting

### Does an empty Closed path stop the workflow?

No. With nothing on the Closed path, the run simply falls through to whatever comes after the Date & Time step — it does not end there.

### If I change the workspace's business hours mid-run, does an in-progress run see the change?

Not until that run next suspends. A run that already read the workspace's hours keeps that reading for the rest of its current, uninterrupted pass; a run that suspends at a Wait and later resumes reads the hours fresh again on resume, same as a brand-new run.

## Related

- [Wait](https://inchat.inseller.my/help/workflows/wait)
- [Condition](https://inchat.inseller.my/help/workflows/condition)
- [Workflows: how a flow runs](https://inchat.inseller.my/help/workflows/workflows-overview)

---

Source files: `src/lib/workflows/ai-builder/spec.ts`, `src/lib/workflows/canvas-model.ts`, `src/components/workflows/WorkflowStepConfigDrawer.tsx`, `src/lib/workflows/business-hours.ts`, `src/lib/workflows/workspace-business-hours.ts`, `src/lib/workflows/engine.ts`, `src/lib/workflows/form-payload.ts`, `src/lib/workflows/pending.ts`
