2016-07-20 7 views
0

はstackexchangeに移動: https://codereview.stackexchange.com/questions/135436/how-can-i-interpret-the-time-with-less-code少ないコードで時間をどのように解釈できますか?

を一緒だ場合、私は本当に多くを貼り付ける好きではない、私はそれがスタッキング子供のように見えると思います...しかし、誰もが同じことを行う方法を知っている場合、私はこれをやっていますコードは少ないが行があれば素晴らしいだろう。本当にここで問題は何

if(json.Data.length>0){ 
       for(var i=0;i<=json.Data.length-1;i++) 
       { 
        s += '<tr><td>' + data[i].data1+ '</td>'; 
        s += '<td>'+ data[i].data2+ '</td>'; 
        if(data[i].data3== null) { 
         s += '<td>N/A</td>' + 
          '<td>Has not logged in.</td>'; 
        } 
        else { 
         s += '<td>' + moment(data[i].data3).format('DD MMM YYYY hh:mm A') + '</td>'; 

         var time = data[i].data4; 
         var summary = '<td>' + time + ' minutes since last login.</td></tr>'; 
         if(time >= 60) { 
          var hour= tiempo/60; 
          summary = '<td>' + Math.floor(hora) + ' hours since last login.</td></tr>'; 
          if(hour>= 24) { 
           var day = hour/ 24; 
           summary= '<td>' + Math.floor(day) + ' days since last login.</td></tr>'; 
           if(dia >= 7) { 
            var week= day/7; 
            summary = '<td>' + Math.floor(week) + ' weeks since last login.</td></tr>'; 
            if(week >= 4) { 
             var month = week/4; 
             summary = '<td>' + Math.floor(mes) + ' months since last login.</td></tr>'; 
            } 
           } 
          } 
          s += summary; 
         } else { 
          s += summary; 
         } 
        } 
       } 
      } 
      $('#bodytable').empty().append(s); 

はライン

var time = data[i].data4; 

と上からです。いくつかのコンテキストについて

data[i].data4

DATEDIFF(mi, Column3, getdate())の操作でカラムからです。

返された結果は分単位で表示されます。その後、私は何時間、何日かなどをチェックし始めます。各行の間に1)ので、言葉を複数形ではなく単数形に変更することができますが、「分」ではなく「分」を単に書くかどうかの判断には多すぎると思います。

+1

この作業のデモを作成できる場合は、 IE(codepen、jsfiddle、plunker)。これはCode Reviewでよりよく尋ねられます。 http://codereview.stackexchange.com/help/how-to-askこれは最適化したい作業コードであると仮定します。 –

+1

あなたは 'moment'を使っているので、なぜモーメントの表示オプションを使わないのですか? http://momentjs.com/docs/#/displaying/from/ – Alan

+0

申し訳ありませんが、私に知らせてくれてありがとう。私はそこに移動します。 – dreami

答えて

1

あなたのJSONオブジェクトについて100%確信しているわけではありませんが、momentjs#fromNowを使用して相対時間文字列を取得できます。

コードを簡素化するのはどれですか。

if(json.Data.length>0){ 
    for(var i=0;i<=json.Data.length-1;i++) { 
     s += '<tr><td>' + data[i].data1+ '</td>'; 
     s += '<td>'+ data[i].data2+ '</td>'; 
     if(data[i].data3== null) { 
      s += '<td>N/A</td>' + 
       '<td>Has not logged in.</td>'; 
     } 
     else { 
      s += '<td>' + moment(data[i].data3).format('DD MMM YYYY hh:mm A') + '</td>'; 
      // not 100% sure what this value is. 
      s += '<td>last login ' + moment(data[i].data4).fromNow() +'</td>' 
      // will output: 
      // last login 15 seconds ago 
      // last login 4 years ago 
      // last login 3 weeks ago 
     } 
    } 
} 
$('#bodytable').empty().append(s); 

正確な書式設定された文字列が必要な場合は、momentjsで更新できます。

moment.updateLocale('en', { 
    relativeTime : { 
     past: "%s" 
    } 
}); 

// then it would look like: 
s += '<td>' + moment(data[i].data4).fromNow() +' since last login</td>'; 
// 5 minutes since last login 
// a hour since last login 
// 187 years since last login 
関連する問題