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;
答案 0 :(得分:1)
我假设此代码在浏览器中运行,而不是在服务器中运行。
您不能依赖d.toTimeString()
并删除时区部分来查找时区,toTimeString
可以在不同的浏览器上返回不同的格式。规范已将格式留给浏览器供应商。
您可以获取timezoneOffset
并将其映射到时区名称,但请稍等,这是一个问题。这可能与区域的日间节能时间设置冲突。因此,您需要一整套世界夏令时的历史数据。
如果您真的想这样做,请使用moment with timezones,它可以为您进行查找,并且已经为您创建了包括DST在内的所有映射。