2015-06-06 6 views
1

Я реализовал эту логику, когда получаю разницу между 2 датами и временем от Moment.js как секунды, и мне нужно преобразовать эти секунды в формат 1 Year 3 Months 10 Days 5 Hours 45 Minutes.Как конвертировать секунды в год, месяц, дни, часы, минуты соответственно?

var numyears = Math.floor(seconds/31536000); 
var nummonths = Math.floor((seconds % 31536000)/2628000); 
var numdays = Math.floor(((seconds % 31536000) % 2628000)/86400); 
var numhours = Math.floor((((seconds % 31536000) % 2628000) % 86400)/3600); 
var numminutes = Math.floor((((seconds % 31536000) % 86400) % 3600)/60); 

Я получаю правильные значения до нескольких дней, но у него проблемы с часами.

+0

Слишком много тегов !! Тонкая разница в API в каждой среде. Будьте конкретны ... –

+0

Не имеет ли момент поддержки этой экстракции? (Существует гуманизация, и я думаю, что может быть способ получить либо другое представление, либо использовать большую часть присутствующего.) – user2864740

+0

Вы можете использовать формат продолжительности-времени. – Indra

ответ

0

Даты и календари являются политическими и не всегда соответствуют простой арифметике. Большинство языков, с которыми я работал, решают эту проблему для вас, и, насколько мне известно, JavaScript делает это. (Заметим, что 30 июня 2015 года мы добавим еще один скачок в наш календарь - http://en.wikipedia.org/wiki/Leap_second.)

Учитывая все это, этот ответ очень приближен, поскольку он не учитывает длины месяцев, високосных дней или секунд прыжка. Но это что-то:

var x = new Date('2015-02-26 12:32:54-0600'); // or if you have milliseconds, use that instead 
var y = new Date('2015-03-19 01:22:09-0600'); 
var z = new Date(y-z); 
z; 
// returns "Wed Jan 21 1970 06:49:15 GMT-0600 (CST)" 
// now compare this with epoch 
var epoch = new Date('1970-01-01 00:00:00-0600'); 
var diff_years = z.getYear() - epoch.getYear(); 
var diff_month = z.getMonth() - epoch.getMonth(); 
var diff_days = z.getDate() - epoch.getDate(); 
var diff_hours = z.getHours() - epoch.getHours(); 
var diff_minutes = z.getMinutes() - epoch.getMinutes(); 
Смежные вопросы