All rules

A period that ends before it starts

date-range-reversedon by defaultJapanese / English

A period whose end date comes before its start date

Example

Flagged
Applications are open 1 April 2026 – 31 March 2026.
What chaff prints
1:23 The period "1 April 2026 – 31 March 2026" ends before it starts
Fixed
Applications are open 1 April 2026 – 31 March 2027.
What chaff prints
no finding

How to fix

Check both dates and correct the one that is wrong.

Why it matters

When a period such as "5 April 2026 – 2 April 2026" ends before it starts, the reader has to ask which date is right. It happens when a year is copied wrong, or when only one of the two dates is changed. Two dates are read as a period when only a range mark (–, —) or a word such as "through" or "until" stands between them, or when they are written "from … to …", or when one sentence gives the start and the end with one start word and one end word on the two dates ("starts on 1 April 2026 and ends on 31 March 2027"). A period without a year ("28 December – 4 January") may run into the next year and is not compared. With the year on one end only ("July 9 – July 8, 2026"), both ends are read in that year; a reversed one is reported only when the weekday on the end without a year matches that reading, or when reading it across the year end would make the period nearly a year long ("December 28 – January 4, 2027" crosses the year end).

What it does not flag

A period without a year, "from … to …" in a sentence with a word that changes a date ("moved from March 10 to March 3", "… was postponed"), two dates with words between them, and a sentence with two start words or two end words ("starts on … and phase 2 starts on …") are not compared.

Turning it off or relaxing it

Silence this one spot (in the document)
<!-- stet: date-range-reversed — reason -->
Relax it for the team (the reason is kept as a comment in chaff.yaml)
npx chaffjs relax date-range-reversed --why "reason"
Turn it off for the team (chaff.yaml)
rules: date-range-reversed: off
Technical details
Layer
L3
Status
stable
Severity
warning
Languages
Japanese and English
Suited to
business, technical, blog, legal, docs, academic, literature, speech
Reads from the document
dates

Levels

Set a level for this rule under rules in chaff.yaml. With nothing set, it runs at the level its genre gives it (see By genre below).

stricterror
normalwarning
relaxedinfo

This rule has no limit to count to. A level sets how a finding is marked: relaxed keeps the finding and marks it a step lower.

By genre

Runs by default in
technical/spec, technical/readme, blog/tech, blog/essay, blog/owned-media, business/proposal, business/report, business/email, business/press-release, business/meeting-notes, legal/contract, legal/statute, legal/judgment, legal/patent, docs/manual, docs/faq, docs/glossary, academic/paper, speech/address, speech/transcript
Turned off by the genre in
literature/fiction, literature/essay, literature/poetry, literature/play

Genres

Message

The period "{period}" ends before it starts

This page is built from the rule's definition file:packages/chaff/rules/date-range-reversed.yaml