日期(根据地区分配)

时间:2018-05-18 07:01:06

标签: javascript date discord discord.js

 var d = new Date();
    "**Zone** - `" + 
    d.toTimeString().replace(/\d+:\d+:\d+\s+/, '').replace(/[G][M][T].\d+/, '') + 
    "` **Time** - " +
    "`" + d.toLocaleTimeString() +
    "` **Date** - " + "`" + 
    d.toLocaleDateString() + "`"

这是我的一串告诉我的地区,时间和日期。我在不和谐机器人上使用它,并试图根据用户的区域使它们不同。我不知道如何做到这一点,但是以视觉为例......

上述代码会让我回复 -

Zone - (AUS Eastern Standard Time) Time - 16:49:28 Date - 2018-5-18

我对此感到满意,但是,对于测试,我让一个外国朋友继续前进,当我试图让结果成为他们的区域时它发送了同样的东西......

Zone - (AMERICA Western Standard Time) Time - 02:29:09 Date - 2018-5-18

有人有什么想法吗?

编辑:在我的一个新项目中,我发现Intl.DateTimeFormat()的用户实际上返回了一个数组。这个函数有一个实例方法,称为.resolvedOptions(),返回一个内部有很多值的对象。我只是继续前进并添加.timezone,返回类似于"澳大利亚/昆士兰"的内容。 var region = Intl.DateTimeFormat().resolvedOptions().timeZone;

1 个答案:

答案 0 :(得分:1)

  

我假设此代码在浏览器中运行,而不是在服务器中运行。

您不能依赖d.toTimeString()并删除时区部分来查找时区,toTimeString可以在不同的浏览器上返回不同的格式。规范已将格式留给浏览器供应商。

您可以获取timezoneOffset并将其映射到时区名称,但请稍等,这是一个问题。这可能与区域的日间节能时间设置冲突。因此,您需要一整套世界夏令时的历史数据。

如果您真的想这样做,请使用moment with timezones,它可以为您进行查找,并且已经为您创建了包括DST在内的所有映射。