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:
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()
+}