StackExchange에서이 문제에 대한 해결책을 찾을 수 없을 때, 나는 내 자신을 만들었습니다. 그것은 UTC 날짜에 동의해야하므로
function calculateSecondsRemaining(startUtc, completedTasks, totalTasks) {
var timezoneOffsetMs = new Date().getTimezoneOffset() * 1000 * 60;
var startDate = new Date(Date.parse(startUtc) - timezoneOffsetMs);
var currentDate = new Date();
var elapsed = currentDate - startDate;
var timePer = elapsed/completedTasks;
var tasksRemaining = totalTasks - completedTasks;
var millisecondsRemaining = tasksRemaining * timePer;
return millisecondsRemaining/1000;
}
이 기능은 브라우저의 시간대 오프셋을 뺍니다. 당신과 같이 호출 할 수 있습니다 : 당신은 사람이 읽을 수있는 출력을 원하는 경우
7158.334723592197
, 당신은 뭔가를 얻을 수 the one in this StackExchange answer 같은 기능이 결합 할 수 있습니다 :
이
calculateSecondsRemaining('2017-09-28T17:53:16', 2717, 8000);
그것은 당신에게 같은 출력을 줄 것이다 같은
secondsToString()
함수의 코드 기준은 아래 제공된다
secondsToString(calculateSecondsRemaining('2017-09-28T17:53:16', 2717, 8000));
"0 years 0 days 1 hours 59 minutes 18.334723592197406 seconds"
:
,
function secondsToString(seconds) {
var numyears = Math.floor(seconds/31536000);
var numdays = Math.floor((seconds % 31536000)/86400);
var numhours = Math.floor(((seconds % 31536000) % 86400)/3600);
var numminutes = Math.floor((((seconds % 31536000) % 86400) % 3600)/60);
var numseconds = (((seconds % 31536000) % 86400) % 3600) % 60;
return numyears + " years " + numdays + " days " + numhours + " hours " + numminutes + " minutes " + numseconds + " seconds";
}