如何在discord.js中将message.createdAt时区从GMT+0000改为GMT+7
修改discord.js机器人消息日志的时区为GMT+7
问题概述
当前使用discord.js开发的机器人,通过message.createdAt记录的消息时间为GMT+0000时区,需要修改为GMT+7时区,使日志输出符合预期格式。
原代码
client.on('messageCreate', async (message) => { var readmessagefile = fs.readFileSync('log.txt', 'utf-8'); var writemessagefile = fs.writeFileSync('log.txt', 'Time - ' + message.createdAt + ' User - ' + message.member.user.username + ': ' + message.content + `\n` + readmessagefile); });
当前输出
Time - Wed Jul 12 2023 00:24:14 GMT+0000 (Coordinated Universal Time) User - haikalmabrur: k.help Time - Wed Jul 12 2023 00:24:10 GMT+0000 (Coordinated Universal Time) User - haikalmabrur: a
期望输出
Time - Wed Jul 12 2023 07:24:14 GMT+7 User - haikalmabrur: k.help Time - Wed Jul 12 2023 07:24:10 GMT+7 User - haikalmabrur: a
修改方案
方案一:使用Intl.DateTimeFormat规范格式化(推荐)
利用JavaScript的Intl.DateTimeFormatAPI指定时区,生成符合要求的时间字符串,这种方法能正确处理时区规则,避免手动计算的误差。
修改后的代码:
client.on('messageCreate', async (message) => { // 配置GMT+7时区的格式选项,匹配期望输出样式 const timeFormatter = new Intl.DateTimeFormat('en-US', { timeZone: 'Etc/GMT-7', // GMT+7对应的标准时区标识 weekday: 'short', month: 'short', day: 'numeric', year: 'numeric', hour: '2-digit', minute: '2-digit', second: '2-digit', timeZoneName: 'short' }); // 格式化时间并修正时区显示文本 const formattedTime = timeFormatter.format(message.createdAt).replace('GMT-7', 'GMT+7'); const logContent = fs.readFileSync('log.txt', 'utf-8'); fs.writeFileSync('log.txt', `Time - ${formattedTime} User - ${message.member.user.username}: ${message.content}\n${logContent}`); });
方案二:手动调整时间偏移(简单直接)
通过给原时间戳加上7小时的毫秒数,得到GMT+7的时间,再替换默认toString输出的时区文本,适合快速修改的场景。
修改后的代码:
client.on('messageCreate', async (message) => { // 计算GMT+7时间:原UTC时间加上7小时的毫秒数 const gmt7Time = new Date(message.createdAt.getTime() + 7 * 3600 * 1000); // 替换时区显示内容 const formattedTime = gmt7Time.toString().replace('GMT+0000 (Coordinated Universal Time)', 'GMT+7'); const logContent = fs.readFileSync('log.txt', 'utf-8'); fs.writeFileSync('log.txt', `Time - ${formattedTime} User - ${message.member.user.username}: ${message.content}\n${logContent}`); });
内容的提问来源于stack exchange,提问作者AnakTentara
相关产品推荐
相关产品推荐

