2020-11-24 22:54:00 +08:00
|
|
|
interface Duration {
|
|
|
|
hour: number;
|
|
|
|
minute: number;
|
|
|
|
second: number;
|
|
|
|
totalSeconds: number;
|
|
|
|
}
|
|
|
|
|
|
|
|
// start and end are in milliseconds.
|
|
|
|
function durationBetween(start: number, end: number): Duration {
|
|
|
|
const durationInMillisec = start - end;
|
|
|
|
const totalSeconds = Math.floor(durationInMillisec / 1000);
|
|
|
|
const hour = Math.floor(totalSeconds / 3600);
|
|
|
|
const minute = Math.floor((totalSeconds - 3600 * hour) / 60);
|
|
|
|
const second = totalSeconds - 3600 * hour - 60 * minute;
|
|
|
|
return { hour, minute, second, totalSeconds };
|
|
|
|
}
|
|
|
|
|
|
|
|
function stringifyDuration(d: Duration): string {
|
|
|
|
return (
|
|
|
|
(d.hour !== 0 ? `${d.hour}h` : "") +
|
|
|
|
(d.minute !== 0 ? `${d.minute}m` : "") +
|
|
|
|
`${d.second}s`
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
export function durationBefore(timestamp: string): string {
|
|
|
|
try {
|
|
|
|
const duration = durationBetween(Date.parse(timestamp), Date.now());
|
|
|
|
if (duration.totalSeconds < 1) {
|
|
|
|
return "now";
|
|
|
|
}
|
2020-12-03 23:09:02 +08:00
|
|
|
return "in " + stringifyDuration(duration);
|
2020-11-24 22:54:00 +08:00
|
|
|
} catch {
|
|
|
|
return "-";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
export function timeAgo(timestamp: string): string {
|
|
|
|
try {
|
2021-01-05 04:05:37 +08:00
|
|
|
return timeAgoUnix(Date.parse(timestamp) / 1000);
|
|
|
|
} catch (error) {
|
|
|
|
console.error("Could not parse timestamp: ", timestamp, error);
|
2020-11-24 22:54:00 +08:00
|
|
|
return "-";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-01-05 04:05:37 +08:00
|
|
|
export function timeAgoUnix(unixtime: number) {
|
|
|
|
const duration = durationBetween(Date.now(), unixtime * 1000);
|
|
|
|
return stringifyDuration(duration) + " ago";
|
|
|
|
}
|
|
|
|
|
2020-11-24 22:54:00 +08:00
|
|
|
export function getCurrentUTCDate(): string {
|
|
|
|
const today = new Date();
|
|
|
|
const dd = today.getUTCDate().toString().padStart(2, "0");
|
|
|
|
const mm = (today.getMonth() + 1).toString().padStart(2, "0");
|
|
|
|
const yyyy = today.getFullYear();
|
|
|
|
return `${yyyy}-${mm}-${dd}`;
|
|
|
|
}
|
2020-12-21 22:51:07 +08:00
|
|
|
|
|
|
|
export function uuidPrefix(uuid: string): string {
|
|
|
|
const idx = uuid.indexOf("-");
|
|
|
|
if (idx === -1) {
|
|
|
|
return uuid;
|
|
|
|
}
|
|
|
|
return uuid.substr(0, idx);
|
|
|
|
}
|