2011-03-10 127 views
1

已經爲此戰鬥了太多天。我想顯示的日期(X)的差異,現在如下:Javascript相對時間 - 在年份和月份中顯示差異

  1. 如果差異是整整一年或幾年 - 只顯示年份差異
  2. 如果diff年和月( 1年,5個月)顯示
  3. 如果差異是幾個月(不是幾年),則顯示月份差異
  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'? – 2011-03-10 15:45:42

+0

變量已通過。簡而言之,我正在做的是找到所有團隊成員的加入年齡。 – joanne 2011-03-10 15:56:10

回答

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 2011-03-10 15:57:36

+0

讓我試着做得更清楚......如果會員加入2010年3月10日,差異是1年。但是如果會員加入2010年1月10日,那麼差異是1年,2個月 – joanne 2011-03-10 15:59:34

+0

並且顯示設置爲像這樣的行+ =''+ RelativeTime(json.joined)+ ''; – joanne 2011-03-10 16:06:37

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 
相關問題