服务器中存储的日期为 GMT+0,没有夏令时。
客户端应该以自己的时区格式接收它。因此我们可以获取时区偏移量并将其与接收日期进行汇总:
const currentTime = new Date();
this.timezoneOffset = currentTime.getTimezoneOffset();
然后我们可以以某种方式检查客户端是否位于 DLS 区域,例如使用 momentjs:
const isDaylightSavingTime = moment().isDST();
我不明白三件事: 1) getTimezoneOffset() 是否已经包含夏令时信息 2)如果没有,更好的方法是检查DST中的用户然后时刻(因为我读过时刻js在它自己的基地中没有一些国家和城市) 3) Moment().add(Moment().utcOffset(), 'm') 返回夏令时日期吗?
最佳答案
And there I can't figure out 3 things: 1) does getTimezoneOffset() already contain Day Light Saving information
Moment 是 ECMAScript Date 对象的包装器。内置 Date 实例的时区偏移基于主机系统设置。根据实现的不同,它可能反射(reflect)也可能不反射(reflect)相关日期(即调用该方法的日期)的时区的历史更改。它至少会反射(reflect)当前的设置。
2) and if not, what the better way to check is user in DST then moment (because I readed thet moment js have not some countries and cities in it's own base)
你需要定义“更好”。除了其他库(例如 Luxon )之外,还有像 timezonedb 这样的 Web API和 Date.prototype.toLocaleString以及使用 IANA 的 timeZone 选项地点名称,例如“亚洲/上海”。如果您愿意,您还可以下载并使用 IANA 时区数据库。
3) does Moment().add(Moment().utcOffset(), 'm') return date with Day Light Saving?
您无法修改时区偏移量,只有一个 getter,因此任何“本地”日期都将应用时区偏移量,无论是特定日期和位置的标准偏移量还是夏令时偏移量。上述所有操作都是按偏移量移动时间,它不会更改时区(除非跨夏令时边界移动)。
日期对象本质上是 UTC,因此一般方法是对所有内容都使用 UTC,并且只考虑时区偏移量进行表示。这并没有涵盖所有场景,但涵盖了大多数场景。其余案例需要根据用例采取特定方法。
如果您描述您正在尝试执行的操作,您可能会得到更相关的答案。
关于javascript - getTimezoneOffset() 是否包含夏令时信息以及如何获取这两个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53364735/