自给定日期以来经过的天数,以及多个国际日期的时间偏移

问题描述 投票:0回答:1

我需要以当地时间显示几个日期/时间 - 但我也希望每个日期的经过时间(以天/小时为单位):

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。

提前致谢,如果您需要任何进一步的信息,请告诉我。

javascript date timezone-offset
1个回答
0
投票

功能

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 中本地显示本地时间。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.