mirror of https://github.com/jkjoy/hugoblog.git
89 lines
2.6 KiB
TypeScript
89 lines
2.6 KiB
TypeScript
|
class farallonDate {
|
||
|
readonly selector: string;
|
||
|
timeFormat: any = {
|
||
|
second: "second ago",
|
||
|
seconds: "seconds ago",
|
||
|
minute: "minute ago",
|
||
|
minutes: "minutes ago",
|
||
|
hour: "hour ago",
|
||
|
hours: "hours ago",
|
||
|
day: "day ago",
|
||
|
days: "days ago",
|
||
|
week: "week ago",
|
||
|
weeks: "weeks ago",
|
||
|
month: "month ago",
|
||
|
months: "months ago",
|
||
|
year: "year ago",
|
||
|
years: "years ago",
|
||
|
};
|
||
|
doms: Array<any> = [];
|
||
|
constructor(config: any) {
|
||
|
this.selector = config.selector;
|
||
|
if (config.timeFormat) {
|
||
|
this.timeFormat = config.timeFormat;
|
||
|
}
|
||
|
this.init();
|
||
|
setTimeout(() => {
|
||
|
this.refresh();
|
||
|
}, 1000 * 5);
|
||
|
}
|
||
|
|
||
|
init() {
|
||
|
this.doms = Array.from(document.querySelectorAll(this.selector));
|
||
|
this.doms.forEach((dom: any) => {
|
||
|
dom.innerText = this.humanize_time_ago(
|
||
|
dom.attributes["datetime"].value
|
||
|
);
|
||
|
});
|
||
|
}
|
||
|
|
||
|
humanize_time_ago(datetime: string) {
|
||
|
const time = new Date(datetime);
|
||
|
const between: number =
|
||
|
Date.now() / 1000 - Number(time.getTime() / 1000);
|
||
|
if (between < 3600) {
|
||
|
return `${Math.ceil(between / 60)} ${
|
||
|
Math.ceil(between / 60) == 1
|
||
|
? this.timeFormat.second
|
||
|
: this.timeFormat.seconds
|
||
|
}`;
|
||
|
} else if (between < 86400) {
|
||
|
return `${Math.ceil(between / 3600)} ${
|
||
|
Math.ceil(between / 3660) == 1
|
||
|
? this.timeFormat.hour
|
||
|
: this.timeFormat.hours
|
||
|
}`;
|
||
|
} else if (between < 86400 * 30) {
|
||
|
return `${Math.ceil(between / 86400)} ${
|
||
|
Math.ceil(between / 86400) == 1
|
||
|
? this.timeFormat.day
|
||
|
: this.timeFormat.days
|
||
|
}`;
|
||
|
} else if (between < 86400 * 30 * 12) {
|
||
|
return `${Math.ceil(between / (86400 * 30))} ${
|
||
|
Math.ceil(between / (86400 * 30)) == 1
|
||
|
? this.timeFormat.month
|
||
|
: this.timeFormat.months
|
||
|
}`;
|
||
|
} else {
|
||
|
return (
|
||
|
time.getFullYear() +
|
||
|
"-" +
|
||
|
(time.getMonth() + 1) +
|
||
|
"-" +
|
||
|
time.getDate()
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
refresh() {
|
||
|
this.doms.forEach((dom: any) => {
|
||
|
dom.innerText = this.humanize_time_ago(
|
||
|
dom.attributes["datetime"].value
|
||
|
);
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
|
||
|
export default farallonDate;
|