You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 09:05:21