2017-02-03 7 views
0

Я пытаюсь получить moment.js, чтобы показать мне время до определенной даты. Я сделал это:MomentJs получает «время до» с двумя переменными

let date = 2017-03-27T12:00:00; 
moment().to(date); 

Это показывает: «in 10 days».

Мне очень хотелось бы показать «in 10 days and 2 hours» или два самых высоких значения. Например, 1 year and 5 months, 4 minutes and 30 seconds.

Есть ли простой способ сделать это? В настоящее время я работаю над сложным методом обработки ...

let years = moment(date).local().diff(moment(), 'years'); 
let months = (moment(date).local().diff(moment(), 'months')); 
let days = (moment(date).local().diff(moment(), 'days')); 
let hours = (moment(date).local().diff(moment(), 'hours')); 
let minutes = (moment(date).local().diff(moment(), 'minutes')); 
let seconds = (moment(date).local().diff(moment(), 'seconds')); 

//The above values return total number each, 
//For example, this could show 1 year, 14 months, 435 days, etc. 
//The math below is supposed to make this say 
//1 year, 2 months, 14 days, etc. 

let yearsRemain = years; 
let monthsRemain = months - (years *12); 
let daysRemain = days - (Math.floor(months * 30)); 
let hoursRemain = hours - (days * 24); 
let minutesRemain = minutes - (hours * 60); 
let secondsRemain = seconds - (minutes * 60); 

var dateArray = [ 
    yearsRemain, 
    monthsRemain, 
    daysRemain, 
    hoursRemain, 
    minutesRemain, 
    secondsRemain 
] 

console.log(dateArray); 

/* 

returns [1, 1, 3, 23, 16, 46] for example 

*/ 

проблема с этим, когда дело доходит до дней. Поскольку дни в году и дни в месяц меняются, я надеялся, что момент. Js поможет мне. Есть ли лучший способ сделать это?

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

ответ

2

Для расчета стоимости dateArray вы можете использовать moment.duration. Продолжительность: years(), months(), days(), hours(), minutes(), seconds() геттеры.

Вот живой пример:

let date = '2017-03-27T12:00:00'; 
 
var dur = moment.duration(moment(date).diff(moment())); 
 

 
let yearsRemain = dur.years(); 
 
let monthsRemain = dur.months(); 
 
let daysRemain = dur.days(); 
 
let hoursRemain = dur.hours(); 
 
let minutesRemain = dur.minutes(); 
 
let secondsRemain = dur.seconds(); 
 

 
var dateArray = [ 
 
    yearsRemain, 
 
    monthsRemain, 
 
    daysRemain, 
 
    hoursRemain, 
 
    minutesRemain, 
 
    secondsRemain 
 
] 
 

 
console.log(dateArray);
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js"></script>

Вы можете использовать moment-duration-format плагин, чтобы показать длительность в пользовательском формате. Плагин имеет опцию template, которая позволяет вам настроить формат.

let date = '2017-03-27T12:00:00'; 
 
let dur = moment.duration(moment(date).diff(moment())); 
 
console.log(dur.format()); 
 
console.log(dur.format('M [months and] d [days]'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-duration-format/1.3.0/moment-duration-format.min.js"></script>

Обратите внимание, что моменты есть relativeTime, relativeTimeRounding и relativeTimeThreshold, что позволяет настроить как момент показывает относительное время (так что вы можете изменить to выход).

+0

Спасибо, я технически работаю в ионной 2 с машинописным текстом. Как только я узнаю, как импортировать формат времени в проект, я попробую это. Спасибо! – ntgCleaner

+0

Ваш первый блок кода работает как шарм. Вы заставили меня понять, что я должен работать от 1 продолжительности, а не нескольких. Спасибо! – ntgCleaner