This library is a personal project that allows rust programmers to parse dates written in the english language, both absolute and relative. These are some examples of dates that you can currently parse:
2024-01-01 at 20:15
28/02/2024 at 10 a.m.
25 minutes ago
Why creating this repo when chrono-english already exists? Well for two reasons. First of all, I didn't knew it existed. Second, there are some formats, or combination thereof, that are not parsable with chrono_english.
This library uses nom, which makes it extremely easy to add new formats to the parsable inputs.
The most basic use of this library looks like this:
fn main() {
match langtime::parse("12/05/2024 at 8pm") {
Ok(datetime) => println!("{:?}", datetime),
Err(_) => println!("Cannot parse input as a date")
};
}
By default, the parse function will discard any input that is found beyond the datetime string. For example, this code would also correctly match a string such as "12/05/2024 is the date", even though "is the date" is not recognized as a time or date format.
There are some options that you can pass through a configuration struct. The first one is the english dialect (US or UK). This is currently only used to discern whether the date format for the language is "dd/mm/yyyy" or "mm/dd/yyyy". Then, you can also force the library to check that the full string is parsable as a date, so that the text "12/05/2024 is the date" will not be considered correct anymore, and will result in an error.
Here is how you can do it:
use langtime::{parse_with_config, ParseConfig, Dialect};
fn main() {
let config = ParseConfig {
dialect: Dialect::US,
full_string_match: true
};
match parse_with_config("05/23/2024 at 9pm", &config) {
Ok(datetime) => println!("{:?}", datetime),
Err(_) => println!("Cannot parse input as a date")
}
}
- Expand allowed tokens to separate parts of sentences
- Correct month and year calculation
- Implement unit tests
- Add missing time format
- Cleanup text before parsing
- Add configuration for english dialects (UK/US)
- Add configuration to force matching to the full string
- 2024-01-20 (ISO)
- 20/01/2024
- yesterday / tomorrow
- 01/2024 (beginning of the month)
- january 2024 (same as above)
- 1st jan 2024
- 17:00
- 17:00:30
- 5 p.m. / 5pm
- 8 o'clock / half past 9 / a quarter to 10
- in 5 hours
- 8 minutes ago
- 2 hours, 8 minutes and 10 seconds ago
- last friday
- next tuesday
- saturday / this saturday
- 2 days ago
- in 3 months
- 2024-01-01T20:30:10
- yesterday at 17:00
- tomorrow at 8 p.m.
- 2 days ago at 5 a.m.
- last friday at 9:00