All rules

A date the calendar does not have

impossible-dateon by defaultJapanese / English

A date not on the calendar ("February 30"), or a year two calendars disagree on

Example

Flagged
Applications close on April 31.
What chaff prints
1:23 "April 31" is not on the calendar (that month has 30 days)
Fixed
Applications close on April 30.
What chaff prints
no finding

How to fix

Check the date that was meant and correct it. For the end of a month, write that month's last day (30 April, 28 February).

Why it matters

A date such as "February 30", "April 31" or "2023-02-29" is not on the calendar. The reader has to find out whether the day before, the day after or another month was meant, and for a deadline someone acts on the wrong day. It happens when the end of a month is taken to be the 31st, or a leap-year schedule is reused. When a Japanese era year and the Western year in brackets beside it disagree (令和6年(2023年), where 令和6 is 2024), the reader cannot tell which year is meant. Month lengths, leap years and the first year of an era are fixed by the calendar, so a machine can tell.

What it does not flag

For a year in a Japanese era, and for a date without a year, February 29 is not reported, since the leap year cannot be decided. A bare run of numbers such as 2026-13-45 may be an identifier or a version, so it is compared with the month's length only when the month is 1 to 12 and the day at most 31; a date with a month's name is likewise checked only up to the 31st. An era year and a Western year in brackets are compared only as calendar years; a fiscal year (令和6年度(2023年度)) and an era whose first year the lexicon does not give are not read. Code is not read.

Turning it off or relaxing it

Silence this one spot (in the document)
<!-- stet: impossible-date — reason -->
Relax it for the team (the reason is kept as a comment in chaff.yaml)
npx chaffjs relax impossible-date --why "reason"
Turn it off for the team (chaff.yaml)
rules: impossible-date: off
Technical details
Layer
L3
Status
stable
Severity
error
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).

normalerror
relaxedwarning

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, literature/fiction, literature/essay, literature/poetry, literature/play, speech/address, speech/transcript

Genres

Message

"{written}" is not on the calendar (that month has {days} days)

"{written}" is not on the calendar (that month has {days} days)

"{written}" is not on the calendar (that year is not a leap year, so February has {days} days)

"{written}" is not on the calendar (months run from 1 to 12)

"{written}" names two different years (outside the brackets {year}, inside {glossYear})

Rewrite depth (chaff fix-plan --depth): light — words and sentences; the structure and the voice stay

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