如何用更少的代码来解释时间?

时间:2016-07-20 18:01:57

标签: javascript jquery json

已移至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 个答案:

答案 0 :(得分:1)

我不是100%肯定您的JSON对象,但您可以使用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