86 lines
2.5 KiB
Vala
86 lines
2.5 KiB
Vala
using GLib;
|
|
|
|
public class Tooth.DateTime {
|
|
|
|
public static string humanize_left (string iso8601) {
|
|
var date = new GLib.DateTime.from_iso8601 (iso8601, null);
|
|
var now = new GLib.DateTime.now_local ();
|
|
var delta = date.difference (now);
|
|
if (delta < 0) {
|
|
return humanize(iso8601);
|
|
} else if (delta <= TimeSpan.MINUTE) {
|
|
return _("expires soon");
|
|
} else if (delta < TimeSpan.HOUR) {
|
|
var minutes = delta / TimeSpan.MINUTE;
|
|
return _(@"$(minutes)m left");
|
|
} else if (delta <= TimeSpan.DAY) {
|
|
var hours = delta / TimeSpan.HOUR;
|
|
return _(@"$(hours)h left");
|
|
} else if (delta <= (TimeSpan.DAY * 60)) {
|
|
var days = delta / TimeSpan.DAY;
|
|
return _(@"$(days)d left");
|
|
} else {
|
|
return date.format (_("expires on %b %e, %Y"));
|
|
}
|
|
}
|
|
|
|
public static string humanize_ago (string iso8601) {
|
|
var date = new GLib.DateTime.from_iso8601 (iso8601, null);
|
|
var now = new GLib.DateTime.now_local ();
|
|
var delta = now.difference (date);
|
|
if (delta < 0)
|
|
return date.format (_("expires on %b %e, %Y %H:%m"));
|
|
else if (delta <= TimeSpan.MINUTE)
|
|
return _("expired on just now");
|
|
else if (delta < TimeSpan.HOUR) {
|
|
var minutes = delta / TimeSpan.MINUTE;
|
|
return _(@"expired $(minutes)m ago");
|
|
}
|
|
else if (delta <= TimeSpan.DAY) {
|
|
var hours = delta / TimeSpan.HOUR;
|
|
return _(@"expired $(hours)h ago");
|
|
}
|
|
else if (is_same_day (now, date.add_days (1))) {
|
|
return _("expired yesterday");
|
|
}
|
|
else if (date.get_year () == now.get_year ()) {
|
|
return date.format (_("expired on %b %e"));
|
|
}
|
|
else {
|
|
return date.format (_("expired on %b %e, %Y"));
|
|
}
|
|
}
|
|
|
|
public static string humanize (string iso8601) {
|
|
var date = new GLib.DateTime.from_iso8601 (iso8601, null);
|
|
var now = new GLib.DateTime.now_local ();
|
|
var delta = now.difference (date);
|
|
if (delta < 0)
|
|
return date.format (_("%b %e, %Y %H:%m"));
|
|
else if (delta <= TimeSpan.MINUTE)
|
|
return _("Just now");
|
|
else if (delta < TimeSpan.HOUR) {
|
|
var minutes = delta / TimeSpan.MINUTE;
|
|
return _(@"$(minutes)m");
|
|
}
|
|
else if (delta <= TimeSpan.DAY) {
|
|
var hours = delta / TimeSpan.HOUR;
|
|
return _(@"$(hours)h");
|
|
}
|
|
else if (is_same_day (now, date.add_days (1))) {
|
|
return _("Yesterday");
|
|
}
|
|
else if (date.get_year () == now.get_year ()) {
|
|
return date.format (_("%b %e"));
|
|
}
|
|
else {
|
|
return date.format (_("%b %e, %Y"));
|
|
}
|
|
}
|
|
|
|
public static bool is_same_day (GLib.DateTime d1, GLib.DateTime d2) {
|
|
return (d1.get_day_of_year () == d2.get_day_of_year ()) && (d1.get_year () == d2.get_year ());
|
|
}
|
|
|
|
}
|