2011-03-10 3 views
1

너무 많은 날 동안이 싸워 왔습니다. 나는 날짜 (X)의 차이를 표시하려고 지금으로는 다음과 같습니다은 diff는 년 또는 몇 년이 정확히자바 스크립트 상대 시간 - 년과 월의 차이 표시

  1. 경우 - 그냥은 diff 년 개월 (경우
  2. DIFF 년 표시 1 년, 5 개월)은 다음과 같이 표시합니다.
  3. diff가 개월 (연수 없음) 인 경우 차이를 표시합니다.
  4. 며칠이면 일을 표시합니다.

희망은 분명합니다. - 매우 피곤합니다. 여기

내 코드입니다 (주석 라인은 내가 일을 얻을 수없는 무엇인가) :

function RelativeTime(x){ 
    var plural = ''; 

    var mins = 60, hour = mins * 60; day = hour * 24, 
    week = day * 7, month = week * 4, year = day * 365; 

if (x >= year){ x = (x/year)|0; dformat="year"; } 
//else 
//if ((x >= year)&& (x >= month)) { x = (x/year), (x/month)|0 ; dformat="year" , "month"; } 
else if (x >= month) { x = (x/month)|0; dformat="month"; } 
else if (x >= day*4) { x = (x/day)|0; dformat="day"; } 
else if (x >= hour) { x = (x/hour)|0; dformat="hr"; } 
else if (x >= mins) { x = (x/mins)|0; dformat="min"; } 
else { x |= 0; dformat="sec"; } 
if (x > 1) plural = 's'; 
if (x < 0) x = 0; 
return x + ' ' + dformat + plural; 
} 
+0

은'만약 relativeTime는()', 당신은 우리에게 샘플'x'를 줄 수 있습니까? –

+0

변수가 전달됩니다. 간단히 말해서, 내가하고있는 일은 모든 팀 구성원들의 조인 연령을 찾는 것입니다. – joanne

답변

0

난 당신이 가서 당신이 당신의 문자열을 구성 할 것이라고 생각, 당신이 그것을 구축하고자부터 쪽으로. 가장 높은 수준의 차이 (단 몇 년 또는 단 몇 달) 만 보여 주려한다면 "else if"구문이 좋을 것입니다.

이 같은

아마 뭔가 :

function RelativeTime(x) { 


    var mins = 60, hour = mins * 60; day = hour * 24, 
     week = day * 7, month = week * 4, year = day * 365; 


    var responseString = ''; 

    if (x >= year) { 
     var numberOfYears = parseInt(x/year, 10); 
     x = x - (numberOfYears * year); 
     responseString += numberOfYears + ' year'; 
     if (numberOfYears > 1) { 
      responseString += 's'; 
     } 
     responseString += ' '; 
    } 

    if (x >= month) { 
     var numberOfMonths = parseInt(x/month, 10); 
     x = x - (numberOfMonths * month); 
     responseString += numberOfMonths + ' month'; 
     if (numberOfMonths > 1) { 
      responseString += 's'; 
     } 
     responseString += ' '; 
    } 
    return responseString; 
} 

// And so on .... 

document.write(RelativeTime(35746121)); 

거기가 확실히 거의 중복 코드를 대체 할이 나올 수있는 기능처럼 보이는 것뿐만 아니라 (이 내에서 관리 할 수있는 몇 가지 효율성이 있고, 당신은 할 수 아마도 거기를 통해 몇 가지 변수를 재사용 할 것입니다.)

+0

나는이 문제가 높은 수준과 (년, 달) 모두를 수행하려고 노력하고 있다고 생각한다. – joanne

+0

내가 더 명확하게하려고 노력해라. .. 회원이 3/10/1010에 가입하면 diff는 1 년이다. 그러나 회원이 2010 년 1 월 10 일에 가입 한 경우 diff는 1 년 2 개월이고 – joanne

+0

이고 디스플레이는이 행 + = ''+ RelativeTime (json.joined) + ''; – joanne

2

보십시오,이 http://jsfiddle.net/mk95J/5/ :에 공급 무엇

var age = ''; 

function RelativeTime(x){ 
    var ymwdhm = [ [31536000, 'year'], 
        [2419200, 'month'], 
        [604800, 'week'], 
        [86400, 'day'], 
        [3600, 'hour'], 
        [60, 'min'], 
        [1, 'sec'] ]; 

    for(var i=0;i<7;i++) { 
     if(x >= ymwdhm[i][0]) { 
      var res = parseInt(x/ymwdhm[i][0], 10); 
      age += res; 
      age += ymwdhm[i][1]; 
      age += res > 1 ? 's ' : ' '; // plural 

      RelativeTime(x - (res * ymwdhm[i][0])); 
      break; 
     } 
    } 
} 

RelativeTime(35746121); 
document.write(age); // 1year 1month 2weeks 6days 17hours 28mins 41 secs