2016-12-04 5 views
1

Я использую следующий в moment.js для преобразования секунд до нескольких дней часов минут формата Секундаmoment.js время неправильно рассчитывается

moment().startOf('year').seconds(1209600).format('DD HH:mm:ss')

Но вместо того, чтобы 14 00:00:00, я получаю 15 00:00:00

Что мне здесь не хватает?

+1

Вы пропускаете, что год начинается с 1 января и 1 + 14 = 15. – RobG

+0

Вы ищете 'продолжительность' 14 дней ?? Это очень отличается от 14 января. –

+1

да, на самом деле продолжительность - это то, что я хотел ... – hnvasa

ответ

3

1209600 секунд 14 дней, поэтому, поскольку первый день года - день 01 00:00:00, если вы добавите 14 дней, вы получите 15 00:00:00.

Вы не говорите точно, что вы пытаетесь сделать, но то, что вы получаете, является правильным ответом на вопрос «какова дата/время для 1209600 секунд в году».

+0

okay ... спасибо за ваш ответ. Не могли бы вы рассказать мне лучший способ изменить вышеприведенный скрипт, чтобы он обрабатывался? – hnvasa

+0

Добавляйте только 13 дней вместо 14 ;-)? Соответственно, добавьте на 1 секунду меньше, так что вы закончите 14 января, 23:59:59. –

+0

Я не передаю это значение самостоятельно ... случайное значение извлекается из системы и преобразуется в требуемый формат ... значение может быть любым размером от 1 до 3000000 – hnvasa

0
moment().startOf('year'); // set to January 1st, 12:00 am this year 

Итак, startOf('year') метод установить момент отправную точку на 1 января текущего года от 12.00 AM , которое начало дня. и вы добавляете 14 дней. Но поскольку начальная дата началась в 12.00, ее еще целый день (ends at 11.50 PM), который добавляет еще один день в конечный результат.

1

Вы пытаетесь работать с концепцией длительностью, но для этого вы используете календарь. Это не очень хорошая идея по нескольким причинам. Как отмечали другие, календарь начинается с 1-го, что отбрасывает вас. Но также, у вас могут быть локальные разрывы в часовых поясах, влияющие на ваши результаты, например, если ваша продолжительность прошла достаточно далеко в год, чтобы попасть в переходный переход на летнее время.

Если вы хотите использовать момент, чтобы работать с длительностями, есть a separate API for that:

var d = moment.duration(1209600, 'seconds'); 

var h = d.hours(); 
var m = d.minutes(); 
var s = d.seconds(); 

Существует в настоящее время не format встроенный метод для длительностей, поэтому вы должны собрать их в строку самостоятельно, при необходимости применяя нулевое дополнение. Тем не менее, есть плагин moment-duration-format третьей стороны, которая позволит вам сделать это следующим образом:

moment.duration(1209600, 'seconds').format('DD HH:mm:ss') 
Смежные вопросы