2010-05-29 4 views
2

이것이 코딩되어 작동하는 것 같습니다.자바 스크립트에서 실시간으로 년, 월, 주 및 요일을 표시합니다.

window.onload = function() { 
    var currentSpan = document.getElementById('current'); 

    var minute = 60000, 
     hour = minute * 60, 
     day = hour * 24, 
     week = day * 7, 
     month = week * 4, 
     year = day * 365; 
     var start = new Date(2009, 6, 1); 

    setInterval(function() { 

     var now = new Date(); 



     var difference = now - start; 


     var years = Math.floor(difference/year), 
      months = Math.floor((difference - (years * year))/month), 
      weeks = Math.floor((difference - (months * month + years * year))/week), 
      days = Math.floor((difference - (weeks * week + months * month + years * year))/day); 



    currentSpan.innerHTML = 'Since has passed: ' + years + ' years, ' + months + ' months, ' + weeks + ' weeks and ' + days + ' days'; 

    }, 500); 

}; 

이 내 스팬 벌금을 업데이트 할 것, 그리고 모든 숫자는 올바른 볼 .

코드는 꽤보기 흉하게 보입니다. 그런 모조 상수를 설정해야하고, 내가 원하는 것을 계산하기 위해 수학을 전부해야합니까?

Date 개체로 작업한지 꽤 오래되었습니다.

이렇게하는 것이 가장 좋은 방법입니까?

답변

4

당신은 배열에있는 그 상수를 넣고 그냥 반복 수 : 물론

function tdiff(utc) { 
    var diff = new Date() - new Date(utc); 
    var units = [ 
    1000 * 60 * 60 * 24 * 365, 
    1000 * 60 * 60 * 24 * 28, 
    1000 * 60 * 60 * 24 * 7, 
    1000 * 60 * 60 * 24, 
    1000 * 60 * 60, 
    1000 * 60, 
    1000 
    ]; 

    var rv = []; 
    for (var i = 0; i < units.length; ++i) { 
    rv.push(Math.floor(diff/units[i])); 
    diff = diff % units[i]; 
    } 
    return rv; 
} 

을 달 이후 몇 년이 정말 정확하지 않습니다, 항상 같은 길이 아니지만, I 당신은 또한이 참조하는 :-)

을 실현 그림 : http://timeago.yarp.com/를이

+0

멋진 종류-의이 네 아, 나는 그것이 100 % 정확하지 않습니다 고려했다입니다. 또한 멋진 플러그인처럼 보이지만 jQuery없이이 프로젝트에 포함시키고 있습니다. 답변을 주셔서 감사합니다 +1 – alex

+0

감사합니다! 귀하의 대답은 내가 secondsToString() 함수를 만드는 데 도움이되었습니다 : http://stackoverflow.com/a/9220897/142225 – skybondsor

0

상수를 설정할 필요는 없지만 모든 숫자 (년, 월, 일, 시간 등)가 필요한 경우 다른 방법을 모르겠습니다.

관련 문제