我需要以当地时间显示几个日期/时间 - 但我也希望每个日期的经过时间(以天/小时为单位):
2024-11-22 04:03:59 (4 days 17 hours ago)
我从正在使用的 json 文件中获得的数据是:
dateUpdated | localTimeOffset
|
2024-11-21 12:05:32 | -05:00:00
2024-11-21 17:02:45 | 00:00:00
2024-11-22 04:03:59 | 11:00:00
这些时间长度应该大致相同,但显然本地日期/时间并不那么明显,除非您考虑偏移量;因此请求时间已过。
我正在使用普通 JS。
提前致谢,如果您需要任何进一步的信息,请告诉我。
功能
formatDaysHours
会将经过的时间格式化为全天和整小时:
const formatDaysHours = elapsed => {
const seconds = 1000;
const minutes = seconds * 60;
const hours = minutes * 60;
const days = hours * 24;
const elapsedDays = Math.floor(elapsed/days);
const remainingTime = elapsed - elapsedDays * days;
const elapsedHours = Math.floor(remainingTime/hours);
const pluralDays = elapsedDays == 1 ? "" : "s";
const pluralHours = elapsedHours == 1 ? "" : "s";
return `${elapsedDays} day${pluralDays}, ${elapsedHours} hour${pluralHours}`;
};
// Usage example:
let startTime = new Date('November 23, 2024 23:55:55 GMT+10:00');
let endTime = new Date();
const elapsed = endTime - startTime; //milliseconds
console.log(elapsed, formatDaysHours(elapsed));
如果您需要最近的小时,可以将
Math.floor(remainingTime/hours)
替换为 Math.round(/* ... */)
。请注意,考虑了名词的多重性:根据值,您可以得到“day”或“days”、“hour”或“hours”。
更重要的是,看看我的评论。想想你的间歇期的结束时间是什么时候。如果这是一个真正的“当前”时间,您可能需要处理计时事件并更新视图,例如每秒更新一次。此外,您应该更好地将所有内容存储在 UTC 中,并仅在 UI 中本地显示本地时间。