gpt4 book ai didi

javascript - Moment.JS 夏令时午夜后的分钟数

转载 作者:行者123 更新时间:2023-11-30 16:27:41 25 4
gpt4 key购买 nike

我正在使用 Moment.js 库,我正在尝试获取给定时间戳自午夜以来经过的分钟数。它运作良好,除了在夏令时发生的日子(等。2015 年 3 月 8 日)。

如何准确获取一年中所有天从午夜开始的分钟数?我是否必须获取时区或偏移量?

http://jsfiddle.net/0uvz61xo/1/

Javascript

$(document).ready(function () {

var minutesFromMidnight = moment("2015-03-08 03:05:00").diff(moment("2015-03-08").startOf('day'), 'minutes')
$('#minutes').text(minutesFromMidnight);

});

HTML

Actual Minutes: <div id="minutes" style="font-weight: bold; color: red;"></div>
<br />
Expected Minutes: <b>185</b> (3 hours and 5 minutes after midnight)

最佳答案

您提供的代码确实是获取自一天开始以来经过的分钟数的正确方法,并且结果是正确的。尽管时钟上的时间是 3:05,但实际上从午夜开始只过去了 2 小时 5 分钟,因为 2:00 和 3:00 之间的时间被跳过了。在秋天,您会产生相反的效果 - 额外 增加了一个小时,因为 1:00 到 2:00 之间的小时会重复。

重要的是要认识到每个人的 DST 都不一样。许多国家根本没有它,而那些拥有它的国家也并非都在同一天或一天​​的同一时间进行。例如,巴西在 10 月向前跳,从 00:00 跳到 01:00。所以那天午夜不存在。一天的开始是那天的1:00。希望这能帮助您理解为什么自午夜以来耗时不一定等于时钟上的小时和分钟值。如果午夜不存在,则该问题无效,即使它存在也不能解释可能的不连续性。

也就是说,如果您真的需要一个时间值作为原始分钟数,那么很容易获得:

var m = moment("2015-03-08 03:05:00");
var result = m.hour() * 60 + m.minute();

不过请记住,这不是自午夜以来耗时。

还要认识到,如果您在美国有一个像 2015-11-01 01:30:00 这样的值,那是在回退过渡期间,所以有 两个 1:30 的实例。首先是夏令时 1:30,然后一个小时后是标准时间 1:30。您可以将 90 计算为这次的结果,但这绝不会告诉您它是这两个实例中的哪一个。同样,从午夜开始不一定是 90 分钟。它可能是,或者如果它是第二次出现凌晨 1:30,则它可能是自午夜以来 150 分钟。

另请参阅,the DST tag wiki ,其中有一些漂亮的图表可以帮助您形象化这一点。

关于javascript - Moment.JS 夏令时午夜后的分钟数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33857944/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com