2015-11-22 4 views
1

Я использую библиотеку Moment.js, и я пытаюсь получить число минут, прошедших с полуночи за данную метку времени. Он работает хорошо, за исключением дней, в которые происходит сбережения дня (и т. Д. 8 марта 2015 года).Минуты с полуночи в Moment.JS в день летнего сбережения

Как я могу получить точное количество минут с полуночи за все дни года? Должен ли я получить часовой пояс или смещение?

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) 

ответ

2

Код, который вы дали действительно правильный путь, чтобы получить число истекших минут с начала дня, и результаты верны. Несмотря на то, что время на часах составляет 3:05, до полуночи прошло только 2 часа и 5 минут, так как час между 2:00 и 3:00 был пропущен. Осенью у вас будет противоположный эффект: добавляется дополнительный час, так как повторяется час между 1:00 и 2:00.

Важно понимать, что DST не то же самое для всех. Во многих странах этого нет, и те, у кого есть это, не все делают это в одни и те же дни или в одно и то же время суток. Например, Бразилия возвращается в октябре и пропускает час с 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 минут с полуночи. Это может быть быть, или это может быть 150 минут с полуночи, если это было второе появление 1:30 утра.

См. Также, the DST tag wiki, в котором есть некоторые интересные графики, которые помогут вам визуализировать это.

Смежные вопросы