fix: make time work with future dates

This commit is contained in:
Ondřej Pešek 2023-03-23 13:18:48 +01:00
parent e25622dac2
commit 5dc3279ac3

View File

@ -815,20 +815,28 @@ pub fn format_num(num: i64) -> (String, String) {
// Parse a relative and absolute time from a UNIX timestamp // Parse a relative and absolute time from a UNIX timestamp
pub fn time(created: f64) -> (String, String) { pub fn time(created: f64) -> (String, String) {
let time = OffsetDateTime::from_unix_timestamp(created.round() as i64).unwrap_or(OffsetDateTime::UNIX_EPOCH); let time = OffsetDateTime::from_unix_timestamp(created.round() as i64).unwrap_or(OffsetDateTime::UNIX_EPOCH);
let time_delta = OffsetDateTime::now_utc() - time; let min = time.min(OffsetDateTime::now_utc());
let max = time.max(OffsetDateTime::now_utc());
let time_delta = max - min;
// If the time difference is more than a month, show full date // If the time difference is more than a month, show full date
let rel_time = if time_delta > Duration::days(30) { let mut rel_time = if time_delta > Duration::days(30) {
time.format(format_description!("[month repr:short] [day] '[year repr:last_two]")).unwrap_or_default() time.format(format_description!("[month repr:short] [day] '[year repr:last_two]")).unwrap_or_default()
// Otherwise, show relative date/time // Otherwise, show relative date/time
} else if time_delta.whole_days() > 0 { } else if time_delta.whole_days() > 0 {
format!("{}d ago", time_delta.whole_days()) format!("{}d", time_delta.whole_days())
} else if time_delta.whole_hours() > 0 { } else if time_delta.whole_hours() > 0 {
format!("{}h ago", time_delta.whole_hours()) format!("{}h", time_delta.whole_hours())
} else { } else {
format!("{}m ago", time_delta.whole_minutes()) format!("{}m", time_delta.whole_minutes())
}; };
if OffsetDateTime::now_utc() < time {
rel_time += " left";
} else {
rel_time += " ago";
}
( (
rel_time, rel_time,
time time