#duration-string #date-time #time-formatting #format-duration #format-time #ago #days

bin+lib timeago

Given a Duration, lossily format it like in 'N days ago'. Parsing it back to Duration is not supported yet.

16 releases

Uses old Rust 2015

0.4.2 Sep 18, 2023
0.4.1 Jan 26, 2023
0.4.0 Dec 10, 2022
0.3.1 Feb 24, 2022
0.0.2 Sep 21, 2017

#24 in Date and time

Download history 4612/week @ 2024-08-02 5214/week @ 2024-08-09 5345/week @ 2024-08-16 5125/week @ 2024-08-23 4886/week @ 2024-08-30 5748/week @ 2024-09-06 5720/week @ 2024-09-13 5207/week @ 2024-09-20 5018/week @ 2024-09-27 5181/week @ 2024-10-04 6604/week @ 2024-10-11 4963/week @ 2024-10-18 4659/week @ 2024-10-25 6149/week @ 2024-11-01 9188/week @ 2024-11-08 13496/week @ 2024-11-15

34,143 downloads per month
Used in 22 crates (20 directly)

MIT/Apache

71KB
1.5K SLoC

timeago

In Rust, format Duration into string like "1 hour ago" or "01hou".

Currently it does not take the calendar into account and assumes each month is about 30.4 days long.

Parsing such string back to a Duration is out of scope for this crate. Maybe see the chrono-english crate instead.

With isolang feature off, it supports Rust from version 1.24.

API

Documentation link

Simplified API excerpt (pseudocode):

pub struct Formatter<L : Language = English>{...}

impl Formatter {
    pub fn new() -> Formatter<English>;
    pub fn with_language(l: Language) -> Self;
    pub fn num_items(&mut self, x: usize) -> &mut Self;
    pub fn max_unit(&mut self, x: TimeUnit) -> &mut Self;
    pub fn min_unit(&mut self, x: TimeUnit) -> &mut Self;
    pub fn too_low(&mut self, x: &'static str) -> &mut Self;
    pub fn too_high(&mut self, x: &'static str) -> &mut Self;
    pub fn max_duration(&mut self, x: Duration) -> &mut Self;
    pub fn ago(&mut self, x: &'static str) -> &mut Self;
    
    pub fn convert(&self, d: Duration) -> String;
    pub fn convert_chrono(&self, from: chrono::DateTime, to: chrono::DateTime) -> String;
}

pub fn from_isolang(x : isolang::Language) -> Option<Box<Language>>;

pub fn format_5chars(d: Duration) -> String;

A Language can be constructed from isolang::Language.

Translations

  • English
  • Russian
  • French
  • Portuguese (contributed)
  • German (unchecked)
  • Belarusian (unchecked)
  • Polish (unchecked)
  • Spanish (contributed)
  • Chinese (contributed)
  • Romanian (contributed)
  • Swedish (contributed)
  • Turkish (contributed)
  • Japanese (contributed)
  • Danish (contributed)
  • Italian (contributed)
  • Ukrainian (contributed)

If you checked some language and certify that it's allright, submit a pull request that removes "(unchecked)" or "(contributed)" in the list above.

Tool

There is a helper command line tool that allows easier experimenting when adding a new translation:

$ cargo run --features isolang en
    Finished dev [unoptimized + debuginfo] target(s) in 0.0 secs
     Running `target/debug/timeago en`
60
1 minute ago
7200
2 hours ago

See also

  • chrono-humanize
  • compound_duration - split Duration into weeks/days/minues/etc. parts

Dependencies

~4MB
~117K SLoC