javascript - 检查不同时区的夏令时是否有效

问题描述 投票:0回答:3

JavaScript 中有很多解决方案可以检查日期是否为夏令时 [ 如何检查 DST(夏令时)是否有效以及偏移量是多少? ].

但是,只有当某人处于适用日光效应的同一时区时,该解决方案才有效, 前任。假设我的当前浏览器(客户端)采用 IST(印度标准 - 没有夏令时更改),并且我想检查 ET(东部时间)的日期是否为白天-5,标准为-4)。仅当我的系统时区是 ET 而不是 IST 时,上述解决方案(来自链接)才会给出正确的结果。

如何计算?

javascript timezone dst timezone-offset
3个回答
5
投票

如果您使用

moment.js
及其配套的
timezome
脚本,它们使检查 DST 变得非常容易:

查看他们的 isDST() 文档

只是为了笑,这里有一个测试每个时区的小提琴

if( moment.tz("America/New_York").isDST() ){
    $('#test').append('NY is currently in DST');
}
else{
    $('#test').append('NY is NOT currently in DST');
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/moment.js/2.8.3/moment.min.js"></script>
<script src="http://momentjs.com/downloads/moment-timezone-with-data.min.js"></script>



<div id="test"></div>


2
投票

您可以使用 luxon 库来检查 DST 在特定区域是否处于活动状态。您所需要的只是时区字符串,您可以检查 DST 是否处于活动状态。

所以首先从 luxon 导入 DateTIme

import { DateTime } from "luxon";

然后检查时区是否启用 DST

if (DateTime.local().setZone(timezone).isInDST) {
  console.log("Dst is active in ", timezone)
}
else {
  console.log("Dst is NOT active in ", timezone)
}

其中时区是您要查找的时区。


0
投票

现在不需要库就可以实现这一点,这要归功于 Intl.DateTimeFormat API,所有现代浏览器和 Node.js 13.0+ 都支持该 API。使用该 API,您可以发出一个包含时区的字符串,该时区根据夏令时而有所不同。

例如,在东部时区,当不是夏令时时,时区字符串为

EST
;当夏令时时,时区字符串为
EDT
。因此,要确定给定的
date
对象是否处于该时区的夏令时期间,您可以执行以下操作:

const tzFormatter = new Intl.DateTimeFormat("en-US", {timeZone: "America/New_York", timeZoneName: "short"});
const isDST = tzFormatter.format(date).endsWith("EDT");
© www.soinside.com 2019 - 2024. All rights reserved.