在 Javascript 中使用夏令时检查日期范围

Posted

技术标签:

【中文标题】在 Javascript 中使用夏令时检查日期范围【英文标题】:Check Date Range with a place that uses Daylight Savings in Javascript 【发布时间】:2021-02-24 23:57:35 【问题描述】:

javascript 中有没有办法检查具有给定经度/纬度和城市的位置是否使用夏令时?

我目前正在遍历来自不同位置的对象列表,需要以秒为单位计算它们的日期范围。

【问题讨论】:

【参考方案1】:

我们可以使用tz-lookup 模块根据位置的经纬度来确定 IANA 时区,如下所示。

我已切换到使用 Luxon 模块来获取每个位置的 UTC 偏移量(以分钟为单位)。一旦你有了这个,你应该能够得到每个城市之间的差异。

let IANAZone = luxon.IANAZone;
let locations = [
     lat: -33.865, lng: 151.209444, name: "Sydney",
     lat: 51.507222, lng: -0.1275, name: "London" ,
     lat: 42.7235, lng: -73.6931, name: "New York" ,
     lat: 39.739167, lng: -104.990278, name: "Denver",
     lat: 34.05, lng: -118.25, name: "Los Angeles"
];

locations = locations.map(loc => (  ...loc, timeZone: tzlookup(loc.lat, loc.lng) ));
   
let rows = [["Location", "Timezone", "UTC Offset (min)", "Current time"], ...locations.map(( name, timeZone ) => [name , timeZone, IANAZone.create(timeZone).offset(new Date()) + "", new Date().toLocaleString('sv',  timeZone )])];
rows = rows.map(row => row.map(s => s.padEnd(20)).join(""))
rows.forEach(row => console.log(row))
<script src="https://cdn.jsdelivr.net/npm/tz-lookup@6.1.25/tz.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/luxon/1.25.0/luxon.min.js"></script>

【讨论】:

padEnd(20) 是做什么的或者我在哪里可以阅读到这个? 刚刚更新了我想要应用此方法的问题,这样做是否有意义: new Date(endDate).toLocaleString('sv', timeZone - new Date (startDate).toLocaleString('sv', timeZone ? 是的,我在不同的时区有不同的位置,所以当我计算范围时,有些会有额外/更少的小时,而有些则没有。我要测试一下谢谢! 结果证明它不起作用。它不转换对象(仅字符串):/ @TerryLennox - 不要将toLocaleString 的字符串输出传递给Date 构造函数。 Date 构造函数会将其解释为 本地时间 - 而不是您想要的时区。最终Date 对象不能代表其他时区。您需要一个库,例如 Luxon。【参考方案2】:

这个问题似乎对你有一些有用的信息。

How to get a time zone from a location using latitude and longitude coordinates?

【讨论】:

以上是关于在 Javascript 中使用夏令时检查日期范围的主要内容,如果未能解决你的问题,请参考以下文章

在 Javascript 中使用时区和夏令时

确定日期夏令时的算法?

有没有办法找出 C# 夏令时前后的时间范围?

夏令时的PHP日期问题

如何将用户的本地时间转换为多伦多时区,然后在 Javascript 中根据多伦多时间检查 dst?

Linux下C语言恢复夏令时