2016-09-06 3 views
0

пытаются отработать оставшееся время между 2 датамиОтработать года: месяцы: остались дни

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

var seconds= Math.floor((timeLeft/1000)%60); 
var minutes= Math.floor((timeLeft/(1000*60))%60); 
var hours= Math.floor((timeLeft/(1000*60*60))%24); 
var dayz= Math.floor((timeLeft/(1000*60*60*24))%31); 
var years= Math.floor((timeLeft/(1000*60*60*24*31))%12); 

$(document).ready(function(){ 
 

 
var currentDate = new Date(2017, 08, 07 , 14 , 33, 20); //set fixed dates to test with 
 
var futureDate = new Date(2018, 08, 07 , 14 , 33, 20); //set fixed dates to test with 
 

 
var countDown = setInterval(function() { 
 
    
 
    
 
\t \t \t var currentD = new Date(2017, 08, 07 , 14 , 33, 20); //set fixed dates to test with 
 
\t \t \t var timeLeft = new Date(); 
 
\t \t \t timeLeft = futureDate - currentD; 
 
    
 
      var seconds= Math.floor((timeLeft/1000)%60); 
 
\t \t \t var minutes= Math.floor((timeLeft/(1000*60))%60); 
 
\t \t \t var hours= Math.floor((timeLeft/(1000*60*60))%24); 
 
\t \t \t var dayz= Math.floor((timeLeft/(1000*60*60*24))%31); 
 
      var years= Math.floor((timeLeft/(1000*60*60*24*31))%12); 
 
    
 
    
 
     $('#timeLeft').text(years + " " + dayz + " " + hours + " " + minutes + " " + seconds); 
 

 
    
 
    
 
}, 1000); 
 

 

 
    $('#currentDate').text(currentDate); 
 
    $('#futureDate').text(futureDate); 
 
    
 
    
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
Current Date: <span id="currentDate"></span><br/> 
 
Future Date: <span id="futureDate"></span><br/> 
 
Time till: <span id="timeLeft"></span><br/>

+0

Я думаю, проблема в том, что вы при условии, что среднее количество дней в месяц являются 31, когда вместо этого 30.41. – zangarmarsh

ответ

0

Могу ли я предложить использовать momentjs вместо этого. Это сделало бы вещи очень просто ... Ниже даст вам разницу в днях, но вы можете легко каждый возможный формат для разницы:

var currentDate = moment([2017, 8, 7 , 14 , 33, 20]); //set fixed dates to test with 
 
var futureDate = moment([2018, 8, 7 , 14 , 33, 20]); 
 
var format = "YYYY-MM-DD HH:mm:ss"; 
 
document.getElementById("currentDate").appendChild(document.createTextNode(currentDate.format(format))); 
 
document.getElementById("futureDate").appendChild(document.createTextNode(futureDate.format(format))); 
 

 
var difference = futureDate.diff(currentDate, 'days', true); 
 
var durationReadable = moment.duration(futureDate.diff(currentDate)).humanize(true); 
 

 
document.getElementById("timeLeft").appendChild(document.createTextNode(difference)); 
 
document.getElementById("duration").appendChild(document.createTextNode(durationReadable));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.14.1/moment-with-locales.min.js"></script> 
 

 
Current Date: <span id="currentDate"></span><br/> 
 
Future Date: <span id="futureDate"></span><br/> 
 
Time till: <span id="timeLeft"></span><br/> 
 
Time till humanized: <span id="duration"></span>

+0

Очень красивый сценарий, но я делаю это, чтобы учиться, поэтому мне нужно усвоить трудный путь и выяснить, как его самостоятельно создать;) –

0

Я получил его, Вот решение для тех, кто такой нуб, как я.

$(document).ready(function(){ 
 
var showOne = new Date(); 
 
var showTwo = new Date(2016, 08, 14); 
 
$('#showOne').text(showOne); 
 
$('#showTwo').text(showTwo); 
 

 

 
setInterval(function(){ 
 
var currentDateSec = $.now()/1000 ; 
 
var laterDate = showTwo; 
 
var laterDateSec = laterDate/1000; 
 
var timeLeft = laterDateSec - currentDateSec; 
 

 
var sLeft = Math.floor(timeLeft) %60; 
 
var mLeft = Math.floor(timeLeft/(60)) %60; 
 
var hLeft = Math.floor(timeLeft/(60 * 60)) %24; 
 
var dLeft = Math.floor(timeLeft/(60 * 60 * 24)) %7; 
 
var wLeft = Math.floor(timeLeft/(60 * 60 * 24 * 7)); 
 

 

 
    $('#currentDate').text(currentDateSec); 
 
    $('#futureDate').text(laterDateSec); 
 
    $('#timeLeft').text(timeLeft); 
 
    
 
    $('#sLeft').text(sLeft); 
 
    $('#mLeft').text(mLeft); 
 
    $('#hLeft').text(hLeft); 
 
    $('#dLeft').text(dLeft); 
 
    $('#wLeft').text(wLeft); 
 
    
 
$('#humandate').text(wLeft + " Weeks - " + dLeft + " Days - " + hLeft + " Hours - " + mLeft + " Mins - " + sLeft + " Sec\(s\)"); 
 
    
 
    
 
}, 1000); 
 

 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<span id="showOne"></span><br/> 
 
<span id="showTwo"></span><br/> 
 
<br/><br/> 
 
Current Date: <span id="currentDate"></span><br/> 
 
Future Date: <span id="futureDate"></span><br/> 
 
Seconds till: <span id="sLeft"></span><br/> 
 
Mins till: <span id="mLeft"></span><br/> 
 
Hours till: <span id="hLeft"></span><br/> 
 
Days till: <span id="dLeft"></span><br/> 
 
Weeks till: <span id="wLeft"></span><br/> 
 
<br/><br/> 
 
<span id="humandate"></span><br/>

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