Discord今日、昨日日期格式化规则咨询及网站集成需求
Discord日期格式化逻辑解析与实现方案
嘿,我正好研究过Discord的日期显示逻辑,它的处理逻辑其实挺清晰的,核心是基于用户本地时间,根据目标时间与当前时间的间隔,动态切换显示文案,完全匹配你提到的「UserOne 昨天 17:03」「UserTwo 今天 13:06」这类格式。
核心规则
Discord的日期判断逻辑可以拆解为三个层级:
- 今日:如果目标时间落在「今天00:00 到 当前时间」的区间内,显示「今天 HH:mm」
- 昨日:如果目标时间落在「昨天00:00 到 今天00:00」的区间内,显示「昨天 HH:mm」
- 更早日期:超过昨天的时间,直接显示完整日期+时间(格式会根据用户地区略有调整,比如部分地区用「MM/DD/YYYY」,但核心是日期+时分)
实现思路(以JavaScript为例)
因为你是开发网站,这里给出前端常用的JavaScript实现方案,核心是用Date对象计算时间区间,再匹配对应的显示文案:
function formatDiscordStyleDate(targetDate) { const now = new Date(); // 计算今天0点的时间戳 const todayStart = new Date(now.getFullYear(), now.getMonth(), now.getDate()); // 计算昨天0点的时间戳 const yesterdayStart = new Date(todayStart.getTime() - 24 * 60 * 60 * 1000); // 辅助函数:格式化时分,确保两位数(比如9:5 → 09:05) const formatTime = (date) => { const hours = date.getHours().toString().padStart(2, '0'); const minutes = date.getMinutes().toString().padStart(2, '0'); return `${hours}:${minutes}`; }; // 判断时间区间 if (targetDate >= todayStart) { return `今天 ${formatTime(targetDate)}`; } else if (targetDate >= yesterdayStart) { return `昨天 ${formatTime(targetDate)}`; } else { // 更早日期:显示完整日期+时间,可根据需求调整格式 const year = targetDate.getFullYear(); const month = (targetDate.getMonth() + 1).toString().padStart(2, '0'); const day = targetDate.getDate().toString().padStart(2, '0'); return `${year}-${month}-${day} ${formatTime(targetDate)}`; } } // 测试用例 console.log(formatDiscordStyleDate(new Date(2024, 4, 21, 13, 6))); // 输出:今天 13:06(假设当前为5月21日) console.log(formatDiscordStyleDate(new Date(2024, 4, 20, 17, 3))); // 输出:昨天 17:03 console.log(formatDiscordStyleDate(new Date(2024, 4, 19, 9, 15))); // 输出:2024-05-19 09:15
额外注意点
- 时区适配:上面的代码用的是用户本地时间(
getHours/getDate等方法),和Discord的逻辑一致,会自动适配用户所在时区。 - 多语言支持:如果你的网站需要多语言,只需要把「今天」「昨天」替换成对应语言的文案即可。
- 边界情况处理:比如刚好是今天0点的时间,会被归类为「今天 00:00」;昨天23:59的时间则显示「昨天 23:59」,完全符合Discord的显示逻辑。
内容的提问来源于stack exchange,提问作者Johnty
相关产品推荐
相关产品推荐

