Input:
Output:
Sunday, May 11, 2025 at 00:00
Examples
- What is the date 30 days from today? today + 30 days
- How many days between 2 dates? 12/25/2020 - 12/25/2021
- How many hours in a week? 1 week as hours
Debug
Tokens:
- Token(DATE, 5/4/2025) - Token(OP, +) - Token(DURATION, 7 days) - Token(EOF)
AST:
PlusNode( DateNode(5/4/2025), DurationNode(7 days))
Syntax
Date calculator syntax in BNF grammar format.
<program> ::= (<dateExpr> | <durationExpr> <castExpr>*)
<dateExpr> ::= <date>
| <date> (<plus> | <minus>) <durationExpr>
<durationExpr> ::= <duration>
| <duration> (<plus> | <minus>) <durationExpr>
| <date> <minus> <dateExpr>
<date> ::= ("now" | "today" | <number> "/" <number> "/" <number>)
<duration> ::= <number> <optWs> <unit>
<castExpr> ::= <ws> ("as" | "to") <ws> <unit>
<unit> ::= ("millisecond" | "second" | "minute" | "hour"
| "day" | "week" | "month" | "year")
<number> ::= [0-9]+
<plus> ::= <optWs> "+" <optWs>
<minus> ::= <optWs> "-" <optWs>
<ws> ::= " "+
<optWs> ::= " "*
Updates
1/25/2024
- Added operator precedence
- Improved error messages
12/27/2023
- Improved grammar and refactored parser
10/19/2023
- Added
now
(ex.now + 12 hours
) - Added
today
(ex.today + 30 days
) - Added aliases for units of time (min, m, sec, s, etc.)
- Added
to
alias (ex.1 hour to minutes
)