存储在服务器上的日期为格林尼治标准时间+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')返回带有夏令时的日期吗?
答案 0 :(得分:2)
我无法弄清楚三件事: 1)getTimezoneOffset()是否已经包含夏令时信息
Moment是ECMAScript Date对象的包装。内置的Date实例的时区偏移量基于主机系统设置。根据实现的不同,它可能反映也可能不反映相关日期(即调用该方法的日期)时区的历史变化。至少会反映出当前设置。
2),如果不是,最好的检查方式是DST中的用户,然后单击moment(因为我读过的那一刻js本身没有一些国家和城市)
您需要定义“更好”。除了其他库(例如Luxon)外,还有timezonedb和Date.prototype.toLocaleString之类的Web API,它们的 timeZone 选项使用IANA位置名称例如“亚洲/上海”。如果需要,您还可以下载并使用IANA时区数据库。
3)Moment()。add(Moment()。utcOffset(),'m')返回带有夏令时的日期吗?
您不能修改时区偏移量,只有一个吸气剂,因此任何“本地”日期都将应用时区偏移量,无论是特定日期和位置的标准时区还是夏时制偏移量。上面所做的所有操作都是将时间偏移偏移量,不会更改时区(除非已跨越夏时制边界)。
Date对象是UTC的核心,因此一般的方法是对所有内容都使用UTC,并且只考虑用于显示的时区偏移量。并不能涵盖所有情况,但大多数情况都可以。其余案例需要根据用例采取特定的方法。
如果描述您要做什么,您可能会得到更相关的答案。