Jen*_*ens 0 javascript timezone datetime date timezone-offset
我想计算从“用户时间”到“ WET / WEST”的偏移量。
我让用户抵消了new Date().getTimezoneOffset()。
但是,如何获取WET / WEST的偏移量,以便能够计算两者的组合偏移量?
例如,如果用户在中欧时间(CET / CEST),则在冬季,组合偏移量将为-60(CET)+ 0(WET)= -60。夏季为-120(CEST)+ 60(WEST)= -60。在这种情况下,它始终为-60,但用户也可以具有不带DST的时区。
如果不将其格式化为字符串并从该字符串中读出新的时区,是否可以做到这一点?
您不能可靠地使用时区缩写作为输入,因为可以用许多不同的方式来解释它们。例如,CST可以是北美的“中央标准时间” ,也可以是“中国标准时间”或“古巴标准时间”。虽然有些缩写像WET和WEST是唯一的,但许多是模棱两可的。请参阅此处的时区缩写列表。
相反,您需要知道IANA时区标识符。使用WET / WEST的一个位置是Portugal,它是IANA的IANA标识符"Europe/Lisbon"。您可以在此处找到标识符列表。选择正确的标识符非常重要,因为时区会随着时间变化。每个标识符反映每个区域的特定历史记录。
一个您知道IANA时区标识符的人,然后您可以选择如何使用它:
在某些完全支持ECMAScript国际化API(ECMA-402)的时区功能的现代浏览器中,您可以执行以下操作:
var d = new Date();
var s = d.toLocaleString(undefined, { timeZone: "Europe/Lisbon" })
Run Code Online (Sandbox Code Playgroud)
这将在格式化期间将提供的日期和时间转换为正确的时区。通过undefined第一个参数将使用当前语言环境进行格式化。
这种方法有一些缺点,因为尚未在所有浏览器中实现,并且没有API可以仅检索特定时间点的原始时区偏移量。
您可以考虑使用实现此功能的库。 我在这里列出其中几个。我个人的喜好是带有moment-timezone插件的moment.js,您可以执行以下操作:
var m = moment.tz("Europe/Lisbon");
var s = m.format();
Run Code Online (Sandbox Code Playgroud)
您可以根据需要将参数传递给该format方法以显示输出。您还可以转换现有时间,例如:
var m = moment.utc("2016-01-01T00:00:00").tz("Europe/Lisbon");
var s = m.format();
Run Code Online (Sandbox Code Playgroud)
您还可以像这样获取特定时间的偏移量:
var m = moment.utc("2016-01-01T00:00:00").tz("Europe/Lisbon");
var offsetInMinutes = m.utcOffset();
var offsetAsString = m.format("Z");
Run Code Online (Sandbox Code Playgroud)您可以编写自己的代码来处理特定时区。尽管这可能容易出错,但我一般不建议这样做。如果沿着这条路走,更新可能会特别困难。
还请记住,特定时区的偏移量将根据生效的日期和时间而有所不同。因此,new Date()根据您的情况,代表“现在”的输入可能会或不一定总是正确的输入。
| 归档时间: |
|
| 查看次数: |
5257 次 |
| 最近记录: |