#date-parser #nom #parser #parser-combinator

nom-date-parsers

The bunch of combinators written with help of nom to parse the numeric and language-specific dates

5 releases (2 stable)

1.1.0 Aug 8, 2024
1.0.0 Aug 4, 2024
0.2.0 Jul 22, 2024
0.1.1 Jul 18, 2024
0.1.0 Jul 17, 2024

#523 in Date and time

Download history 284/week @ 2024-07-18 49/week @ 2024-07-25 115/week @ 2024-08-01 108/week @ 2024-08-08 2/week @ 2024-08-15 19/week @ 2024-09-12 17/week @ 2024-09-19 18/week @ 2024-09-26 2/week @ 2024-10-03

266 downloads per month

MIT license

49KB
691 lines

nom-date-parsers

GitHub Actions Workflow Status docs.rs Crates.io Version Crates.io Total Downloads

The bunch of combinators written with help of nom to parse the numeric and language-specific dates.

Currently the following languages are supported:

  • Russian (ru feature flag)
  • English (en feature flag, enabled by default)

This crate can be used to write other parsers or standalone to parse chrono::NaiveDates from strings.

This crate uses chrono::Local type for almost all date computations.

Why?

I work on my telegram bot and provide to my users the way to get some information by the date in the format: dd-mm-yyyy. Indeed some of them get the correct format and successfully receive what they want. Others just throw something vaguely reminiscent of the date and complain that bot can't understand them. So, this crate tries to solve this problem.

Numeric dates

The following patterns can be recognized

  • dd/mm/y4
  • mm/dd/y4
  • y4/mm/dd
  • dd
  • dd/mm
  • mm/dd

Instead of the / symbol the other separators can be used:

  • /
  • -
  • .
  • any number of spaces (whitespaces and tabs)

It's not necessary that separators match in every place, so the dd/mm-y4 or even dd mm.y4 are acceptable formats

To parse the chrono::NaiveDate value you can use the following methods:

In case of absence of any date part the corresponding date part of today is used.

Language-specific days

Each language-specific parsers are put behind the corresponding feature flag (ru or en), except the en which is available by default.

Sometimes its cool to receive a date for a relative day or weekday (fully or shortly named):

For more info of usage see the documentation of functions

Dependencies

~2MB
~37K SLoC