Can native JQL measure time in status?
Short answer: no. Here's exactly how far native JQL gets you, and where it stops.
Current status only:
status = "In Progress"Returns everything sitting in “In Progress” right now — but tells you nothing about duration.
Status history, not duration:
status WAS "In Progress"
status CHANGED FROM "To Do" TO "In Progress" DURING ("2026-01-01", "2026-03-31")The WAS and CHANGED operators let you query an issue's history — whether it ever entered a status, or when it transitioned. But they still can't return how long it stayed there. Summing cumulative time across multiple visits to a status is simply outside what native JQL can do.
That gap — “show me issues that have spent more than X in this status” — is the everyday question native JQL can't answer.
The fix: Argon's timeInStatus function
Argon adds a timeInStatus function to JQL that filters issues by exactly that:
issue > timeInStatus("project = DEV", "In Progress", "2w")This returns issues in project DEV that have spent more than two weeks in “In Progress.” Breaking it down:
"project = DEV"— the subquery defining which issues to evaluate"In Progress"— the status to measure"2w"— the duration threshold- The operator before the function (
>) sets the comparison. Supported:=,!=,>,>=,<,<=.
Time format: 2w 3d 5h 30m 45s (weeks, days, hours, minutes, seconds) — combine units as needed, e.g. "1w 2d".
If you store time-in-status on a custom field, you can compare it directly with timeExpression:
"Time in Development.time" > timeExpression("3d")For the complete reference — every argument, supported operator, time-format unit, and error case — see the full timeInStatus documentation.
Worked examples
Find tickets stuck in progress (bottlenecks):
issue > timeInStatus("project = DEV AND status = 'In Progress'", "In Progress", "2w")Catch slow code review:
issue > timeInStatus("project = DEV", "In Review", "3d")Surface SLA risks in support:
issue >= timeInStatus("project = SUP", "Waiting for Support", "1d")Find fast-moving work (quality check):
issue < timeInStatus("project = DEV", "In Progress", "1h")Drop any of these into a board filter, dashboard gadget, or saved filter to monitor it continuously.
Prefer this as a live dashboard? A JQL query answers “which issues”; a chart answers “how the whole flow looks.” Measure cycle time in Jira with Spectra — time-in-status, distribution, and p50/p85 on a dashboard you can cross-filter.
Time in status vs. status history — which do you need?
These get confused, so to be clear:
- “How long was it in a status?” → duration → use
timeInStatus(this page). - “Who moved it, and when?” → history → use Argon's
transitionedByfunction. See Who Moved It, and When? 5 Ways to Put Jira's transitionedBy to Work.
Most workflow analysis uses both together.
Need pattern matching instead? See how to use regex in JQL searches, or grab the full JQL Cheat Sheet.
FAQ
Can JQL calculate time in status?
Not natively. Native JQL can filter by current status and query status-change history with WAS and CHANGED, but it cannot calculate the duration an issue spent in a status. Argon's timeInStatus function adds that capability.
How do I find tickets stuck in a status in Jira?
Use issue > timeInStatus("<your subquery>", "<status>", "<duration>") — for example issue > timeInStatus("project = DEV", "In Progress", "2w") finds issues stuck in “In Progress” for more than two weeks.
Does measuring time in status send my data outside Jira?
No. Argon is built natively on Atlassian Forge — your data never leaves your Jira instance. Read why that matters.
What time units does timeInStatus support?
Weeks, days, hours, minutes, and seconds, combinable: 2w 3d 5h 30m 45s.
