如何获取不含GMT+0000 (Coordinated Universal Time)的createdAt时间戳?
解决时间格式中UTC后缀的问题
嘿,我来帮你搞定这个时间显示的问题!你现在看到的GMT+0000后缀是因为直接调用Date对象的toString方法(模板字符串会默认触发这个),它会自动带上时区信息。下面给你几个简单有效的解决方案:
方法1:用toLocaleString()快速生成无时区格式
这是最简便的方法,它会根据运行环境的地区设置生成不带时区后缀的时间格式:
{name: "Registered:", value: `${user.createdAt.toLocaleString()}`}, {name: "Joined:", value: `${message.guild.joinedAt.toLocaleString()}`}
比如在英文地区会显示类似10/5/2023, 3:45:22 PM,中文地区则是2023/10/5 15:45:22,完全没有多余的时区后缀。
方法2:用Intl.DateTimeFormat自定义精准格式
如果想精确控制时间的显示样式(比如固定为YYYY-MM-DD HH:mm:ss格式),可以用JavaScript的国际化API:
// 定义你想要的格式选项 const customDateOptions = { year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit', second: '2-digit', hour12: false // 启用24小时制,去掉AM/PM标识 }; // 应用到你的代码里 {name: "Registered:", value: `${new Intl.DateTimeFormat('en-US', customDateOptions).format(user.createdAt)}`}, {name: "Joined:", value: `${new Intl.DateTimeFormat('en-US', customDateOptions).format(message.guild.joinedAt)}`}
这样会输出类似2023-10-05 15:45:22的规整格式,完全符合你的需求。
方法3:手动拼接时间字段(最灵活)
如果你想完全掌控每一部分的显示逻辑,可以手动提取年、月、日等字段再拼接:
// 写一个自定义格式化函数 function formatCustomDate(date) { const year = date.getFullYear(); const month = String(date.getMonth() + 1).padStart(2, '0'); // 月份从0开始,要+1补全 const day = String(date.getDate()).padStart(2, '0'); const hours = String(date.getHours()).padStart(2, '0'); const minutes = String(date.getMinutes()).padStart(2, '0'); const seconds = String(date.getSeconds()).padStart(2, '0'); return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; } // 使用函数格式化时间 {name: "Registered:", value: `${formatCustomDate(user.createdAt)}`}, {name: "Joined:", value: `${formatCustomDate(message.guild.joinedAt)}`}
这个方法可以随意调整格式,比如改成MM/DD/YYYY或者只显示日期不显示时间,自由度拉满。
不管选哪种方法,都能完美去掉你讨厌的UTC后缀,根据自己的需求挑选就行啦!
内容的提问来源于stack exchange,提问作者Itzkaiiii
相关产品推荐
相关产品推荐

