2016-09-15 9 views
0

Я реализую функцию для обратного отсчета в текущем времени угловой формы - существующее время в будущем. Если время истекло, отобразите сообщение. Таймер закончился ... ЧЧ: ММ: СС

  • Конец времени. Назовите его endTime например: 15.09.2016 21:16:00 PM
  • Текущее время. Время, в которое мы живем. Позволяет называть это currentTime.

Целью является получение таймера, который является текущим временем окончания. Сохраните его в переменной TotalHours.

Затем рассчитайте оставшееся время для СЕЙЧАС на общее количество часов. Например, TotalHours = 5. И СЕЙЧАС 14/14/2016 1:16:00, а затем FinalCountDown = 6:16:00 PM. То есть таймер я хочу продолжить ...

Вот как я это делаю ...

if (info.endTime) { 

    var CurrentTime = new Date().toLocaleString('en-US'); 
    moment.locale(); // en 

    var TotalHours = moment.utc(moment(info.diffTime, "DD/MM/YYYY HH:mm:ss").diff(moment(CurrentTime, "DD/MM/YYYY HH:mm:ss"))).format("HH:mm:ss"); 

    info.finalCountDown= TotalHours; 

}; 

Проблема здесь заключается в следующем:

Случай 1:

endTime = 9/15/2016 9:16:00 AM 
currentTime = 9/15/2016 1:21:00 PM 

TotalHours = 4:05:00 

Но ... если его после следующих 2 дней ...

Дело 2:

endTime = 9/17/2016 9:16:00 AM 
currentTime = 9/15/2016 1:21:00 PM 

TotalHours = 4:05:00 

Total hours is still the same... 

мне нужно добавить 24 часа + 24 часа + дополнительное время = 48 + 4:05:00 = 52:05:00

также я хочу, чтобы отобразить как: 52ч: 05m: 00s

Пожалуйста, дайте мне знать, как решить эту проблему ...

ответ

1

быстрое и грязное решение было бы просто преобразовать разницу между объектами две даты/времени в миллисекунды, а затем сделать некоторую математику на миллисекундах и форматирование выход следующим образом:

var currentTime = new Date("9-15-2016 13:21:00"); 
var endTime = new Date("9-17-2016 09:16:00"); 

var ms = (endTime - currentTime); // ms of difference 
var days = Math.round(ms/ 86400000); 
var hrs = Math.round((ms% 86400000)/3600000); 
var mins = Math.round(((ms% 86400000) % 3600000)/60000); 

$scope.finalCountdown = (days + "d:" + hrs + " h:" + mins + "m left"); 

Вы можете добавить расчёт в считанные секунды, если вам нужно, и вы можете сделать форматирование чисел с ведущими нулями.

Однако при этом не учитываются такие проблемы, как високосные годы и другие аномалии данных и времени. Лучшим предложением было бы использовать angular-moment, который использует Moment.js, так как он легко справляется с различиями и форматированием.

+0

Я пробовал использовать Momentjs. Это не работает. Я не могу следовать шагам. – asax

+0

@asax - ознакомьтесь с этим руководством по scotch.io и посмотрите, поможет ли это вам: https://scotch.io/tutorials/display-time-relatively-in-angular – Hooligancat

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

  • Нет связанных вопросов^_^