在 DST 过渡期间增加几个小时
Posted
技术标签:
【中文标题】在 DST 过渡期间增加几个小时【英文标题】:Adding hours across the DST transition in moments 【发布时间】:2019-10-14 21:16:25 【问题描述】:我正在尝试使用 d3 创建一个图表,该图表在每个上午 0 点、上午 6 点、中午和下午 6 点都有一条垂直网格线(偏离 X 轴)。我通过手动计算 momentjs 中的刻度值来做到这一点。我很容易用
计算一天的开始 firstPoint = momenttz(startDate).startOf('day')
然后循环加6小时。
for (let i = 0; i <= days * 24; i += 6)
hourTickValues.push(firstPoint.clone().add(i, 'hours'));
在进入或退出夏令时时,我希望将线路保持在当地时间早上 6 点、中午和下午 6 点。这将意味着一年两次的网格间距会有所不同,因为在凌晨 12 点到早上 6 点之间只有 5 小时进入 DST,而离开时只有 7 小时。
Momentjs 的docs 明确指出,将小时 添加到时间时,它不会针对夏令时进行调整,但添加天 时会调整。我还发现添加小数天数不起作用,它总是四舍五入为整数。
那么,如何根据 DST 调整时钟可靠地为每 6 小时创建一个 (momentjs) 日期对象?
【问题讨论】:
您是否尝试过使用持续时间?您链接的文档指出:或者,您可以使用 durations 添加到时刻,因此您可能会有类似:hourTickValues.push(firstPoint.clone().add(moment.duration(hours: i));
我没有,因为在提出问题的几分钟内,我已经通过手动将每个项目投射到第 6 小时来解决它hourTickValues[everyhourTickValues.length - 1].hours(i % 24);
【参考方案1】:
我通过在创建后一小时手动设置每个时间对象来解决这个问题。
for (let i = 0; i <= days * 24; i += 6)
hourTickValues.push(firstPoint.clone().add(i, 'hours'));
hourTickValues[hourTickValues length - 1].hours(i % 24);
【讨论】:
以上是关于在 DST 过渡期间增加几个小时的主要内容,如果未能解决你的问题,请参考以下文章
小米和OPPO等中国ROM的工作管理器,在电池优化时,将预定的工作延迟增加几个小时