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
对此我很满意,但是,对于一次测试,我让一位外国 friend 跳上来,当我试图使结果是他们所在的地区时,它发送了相同的内容,所以......
Zone - (AMERICA Western Standard Time) Time - 02:29:09 Date - 2018-5-18
有人有什么想法吗?
编辑:在我的一个新项目中,我发现 Intl.DateTimeFormat()
的用户本质上返回一个数组。该函数有一个名为 .resolvedOptions()
的实例方法,返回一个包含多个值的对象。我只是继续添加 .timezone
,它返回类似于“澳大利亚/昆士兰”的内容。
varregion = Intl.DateTimeFormat().resolvedOptions().timeZone;
最佳答案
I am assuming this code is run in a browser, and not in a server.
您不能依赖d.toTimeString()
并删除时区部分来查找时区,toTimeString
可以在不同的浏览器上返回不同的格式。该规范将格式留给了浏览器 vendor 。
您可以获取timezoneOffset
并将其映射到时区名称,但是等等,有一个问题。这可能与地区的夏令时设置冲突。因此,您将需要一组世界各地夏令时的历史数据。
如果您确实想这样做,请使用 moment with timezones ,它可以为您进行查找,并且他们已经为您创建了包括 DST 在内的所有映射。
关于javascript - 日期(根据地区分配),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50405552/