notedeck

One damus client to rule them all
git clone git://jb55.com/notedeck
Log | Files | Refs | README | LICENSE

commit c246b9d92f20b8042b1394b9aee488b4c79c3624
parent 2f54a05705c278f9a678062592d544ec7eed60d4
Author: William Casarin <jb55@jb55.com>
Date:   Thu, 15 Feb 2024 13:03:14 -0800

time: add time_ago function from Damus iOS

Useful relative time formatting

Signed-off-by: William Casarin <jb55@jb55.com>

Diffstat:
Msrc/lib.rs | 1+
Asrc/time.rs | 47+++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 48 insertions(+), 0 deletions(-)

diff --git a/src/lib.rs b/src/lib.rs @@ -10,6 +10,7 @@ mod result; mod filter; mod ui; mod timecache; +mod time; mod frame_history; mod timeline; diff --git a/src/time.rs b/src/time.rs @@ -0,0 +1,47 @@ +use std::time::{Duration, SystemTime, UNIX_EPOCH}; + +/// Show a relative time string based on some timestamp +pub fn time_ago_since(timestamp: u64) -> String { + let now = SystemTime::now() + .duration_since(UNIX_EPOCH) + .expect("Time went backwards") + .as_secs(); + let duration = now.checked_sub(timestamp).unwrap_or(0); + + let years = duration / 31_536_000; // seconds in a year + if years >= 1 { + return format!("{}yr", years); + } + + let months = duration / 2_592_000; // seconds in a month (30.44 days) + if months >= 1 { + return format!("{}mth", months); + } + + let weeks = duration / 604_800; // seconds in a week + if weeks >= 1 { + return format!("{}wk", weeks); + } + + let days = duration / 86_400; // seconds in a day + if days >= 1 { + return format!("{}d", days); + } + + let hours = duration / 3600; // seconds in an hour + if hours >= 1 { + return format!("{}h", hours); + } + + let minutes = duration / 60; // seconds in a minute + if minutes >= 1 { + return format!("{}m", minutes); + } + + let seconds = duration; + if seconds >= 3 { + return format!("{}s", seconds); + } + + "now".to_string() +}