Javascript相对时间 - 显示年份和时间的差异月

时间:2011-03-10 15:35:43

标签: javascript

已经打了太多天了。我试图显示日期(x)的差异,现在如下:

  1. 如果差异恰好是一年或几年 - 只显示年差异
  2. 如果差异为年和月(1年,5个月)显示就好了
  3. 如果差异为月(无年),则显示月差异
  4. 如果是几天,请显示日期。
  5. 希望很清楚 - 我很累。

    这是我的代码(注释行是我无法工作的):

    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;
    }
    

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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));

也有一些效率可以在那里进行管理(当然看起来像一个函数可以用来替换几乎重复的代码,你可以在那里重用一些变量)。