日期(根据地区分配)

Dates (Assigning them depending on region)

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

这是我的字符串,告诉我地区、时间和日期。我在不和谐的机器人上使用它,并试图根据用户所在的地区使它们有所不同。我不确定如何完成此操作,但对于视觉示例...

上面的代码returns我-

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() 的用户本质上是 returns 一个数组。此函数有一个称为 .resolvedOptions() 的实例方法,返回一个包含许多值的对象。我只是继续添加 .timezone,它返回类似于 "Australia/Queensland" 的内容。 var region = Intl.DateTimeFormat().resolvedOptions().timeZone;

I am assuming this code is run in a browser, and not in a server.

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

您可以获得 timezoneOffset 并将其映射到时区名称,但是等等,有一个问题。这可能与地区的夏令时设置冲突。因此,您将需要一组全球夏令时的历史数据。

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