检查夏令时时刻js

时间:2018-10-09 00:21:20

标签: javascript momentjs

所以我在夏时制和.isDST()标志方面遇到问题。

因此,我有一个时间选择器,用户可以在其中设置开始时间,然后我将两个数字值(小时和分钟)转换为矩量对象。

this.startTime = moment(`${this.hour}:${this.minute} ${this.timeOfDay}`, `hh:mm a`).utc();

现在可以保存所有内容,但是当我得到它时,由于夏令时而返回了一个小时。.现在我知道.isDST()标志,但是我不确定在哪里可以设置它。

我尝试过

this.startTime = moment(`${this.hour}:${this.minute} ${this.timeOfDay}`, `hh:mm a`).utc().isDST(); 

但是返回的日期无效,我也尝试过返回。

time = moment(startTime).local().format('hh:mm').isDST(); 
time = moment(startTime).isDST().local().format('hh:mm');
time = moment(startTime).local().isDST().format('hh:mm');

但是这些都不起作用...

解决此问题的正确方法是什么?

编辑

为澄清..我如何在官方文档中使用.isDST()只是说moment().isDST();,所以我如何检查local的转换时间是否由utc转换而来是DST,然后正确格式化

2 个答案:

答案 0 :(得分:2)

Here,他们说UTC绝不是DST。因此moment('anything...').utc().isDST()将始终返回false。

下一步-通过documentation判断,isDST不设置任何内容,它是一种getter方法,如果时间对应于DST周期,则返回true,否则返回false。

不确定如何解决问题,但是utcOffset可能会有所帮助。如果您发现时间不对,请在此处添加/减去1小时,然后计算出来。

答案 1 :(得分:1)

这显示了它是如何工作的。您只需要在具有local()或DST适用的特定时区的时刻使用isDST()。我认为这仅适用于hh:mm。您可能需要一个实际日期(时间可选)来确定它是否是夏令时。

console.log(moment().utc().isDST());
console.log(moment().tz("America/New_York").isDST());
<script src="https://momentjs.com/downloads/moment.js"></script>
<script src="https://momentjs.com/downloads/moment-timezone-with-data.js"></script>