首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解读时间

解读时间
EN

Code Review用户
提问于 2016-07-20 22:15:35
回答 1查看 70关注 0票数 1

编辑:溢出的替代答案:https://stackoverflow.com/questions/38487692/how-can-i-interpret-the-time-with-less-code/38492144#38492144

但我也想把约拿的答案留在这里。只要让我知道,如果我真的要结束这个或堆叠溢出的问题。

我真的不喜欢把很多ifs粘在一起。我觉得这看起来像个堆叠的孩子。但是,如果有人知道如何使用这段代码做同样的事情,但是代码行少了,那就太好了。

代码语言:javascript
复制
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;
                    }

对于某些上下文:data[i].data4来自DATEDIFF(mi, someDate, getdate())的一个操作列。

正如您所看到的,返回的结果将在几分钟内完成,从那时起,我开始检查每一行的时间、天数等等,我甚至愿意在每一行之间加上an (如果大于1),所以我可以将措辞改为单数,而不是复数,但我认为这行太多了,我决定是否只写“分钟”而不是“分钟”。

EN

回答 1

Code Review用户

发布于 2016-07-21 06:41:02

这里有一个没有任何ifS的重写:

代码语言:javascript
复制
function humanTime(minutes) {
  var units          = ['months' , 'weeks' , 'days' , 'hours'];
  var minutesPerUnit = [40320    , 10080   , 1440   , 60];
  var timeInUnits    = minutesPerUnit.map(x => Math.floor(minutes / x));
  var time           = timeInUnits.find(x => x > 0);
  var unit           = units[timeInUnits.indexOf(time)];
  return time + ' ' + unit;
}

注意,我从这段代码中删除了<td>s,因为它主要是一个视图(格式化)关注点。这使得这个函数保持更有针对性:它只需几分钟,并酌情将其转换为小时/天/周/月。

您还可以考虑返回表单的一个对象:{time: 6, unit: 'days'},而不是我所拥有的字符串,以使数据和视图的分离更加强大。

票数 1
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/135436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档