繁体   English   中英

夏令时,Moment.JS中从午夜开始的分钟

[英]Minutes from midnight in Moment.JS on day of Daylight Savings

我正在使用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分钟。

另请参见DST标签wiki ,它具有一些漂亮的图形来帮助您可视化。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM