2016-07-20 2 views
0

Umzug nach Stack: https://codereview.stackexchange.com/questions/135436/how-can-i-interpret-the-time-with-less-codeWie kann ich die Zeit mit weniger Code interpretieren?

Ich mag nicht viele kleben, wenn zusammen ist, halte ich es wie ein Kind aussieht Stapeln ... aber wenn jemand weiß, wie man das Gleiche zu tun mit diesem Ich mache Code, aber mit weniger Zeilen, wäre es toll.

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

Was wirklich zählt, ist hier von der Linie

var time = data[i].data4; 

und weiter.

Aus irgendeinem Zusammenhang: data[i].data4 ist aus einer Spalte, die eine Operation der

DATEDIFF(mi, Column3, getdate()) ist.

Wie Sie sehen können, wären die zurückgegebenen Ergebnisse in Minuten und von da an würde ich überprüfen, wie viele Stunden, Tage und so weiter und ich würde auch gerne zwischen jeder Zeile hinzufügen (wenn es größer ist als 1) so kann ich die Formulierung in Singular statt in Plural ändern, aber ich denke, das sind zu viele Zeilen, nur um zu entscheiden, ob man einfach "Minute" anstelle von "Minuten" schreibt.

+1

Wenn Sie eine Demo dieser Arbeit erstellen können. IE (Codepen, Jsfiddle, Plocker). Dies könnte besser bei Code Review gefragt werden. http://codereview.stackexchange.com/help/how-to-ask Nehmen wir an, dass dieser Code funktioniert, den Sie optimieren möchten. –

+1

Da Sie "Moment" verwenden Warum nicht die Anzeigeoption des Moments verwenden? http://momentjs.com/docs/#/displaying/from/ – Alan

+0

In Ordnung, danke, dass Sie mich wissen lassen. Ich werde es dorthin bewegen. – dreami

Antwort

1

Ich bin nicht 100% sicher über Ihr JSON-Objekt, aber Sie können momentjs#fromNow verwenden, um die relative Zeitzeichenfolge abzurufen.

Welcher Super vereinfacht den 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>'; 
      // 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); 

Wenn Sie die genauen formatiert Strings benötigen, können Sie sie in momentjs aktualisieren.

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 
Verwandte Themen