我希望得到这个正确的,我对此有点沮丧。我想做的是让时间,日期和周数正确。
示例:
如果这篇文章是< 60分钟然后阅读:发布少于1分钟前
如果这篇文章是< 120分钟然后阅读:发布于1小时前
如果这篇文章是> 120分钟然后阅读:发布于1小时前
如果这篇文章是< 1440分钟然后阅读:发布于1天前
如果这篇文章是> 1440分钟然后阅读:发表于2天前
是吗??
这是我到目前为止所做的:
if (lapsedTime < 60) {
return '< 1 mimute';
} else if (lapsedTime < (60*60)) {
return Math.round(lapsedTime / 60) + 'minutes';
} else if (lapsedTime < (12*60*60)) {
return Math.round(lapsedTime / 2400) + 'hr';
} else if (lapsedTime < (24*60*60)) {
return Math.round(lapsedTime / 3600) + 'hrs';
} else if (lapsedTime < (7*24*60*60)) {
return Math.round(lapsedTime / 86400) + 'days';
} else {
return Math.round(lapsedTime / 604800) + 'weeks';
}
答案 0 :(得分:1)
你有一些错别字和错过的案例:
if (lapsedTime < 60) {
return '< 1 minute';
} else if (lapsedTime < (2*60*60)) { // Missed this case
return '1 minute';
} else if (lapsedTime < (60*60)) {
return Math.round(lapsedTime / 60) + ' minutes';
} else if (lapsedTime < (2*60*60)) { // This should be 2, not 12
return '1 hour';
} else if (lapsedTime < (24*60*60)) {
return Math.round(lapsedTime / 3600) + ' hours';
} else if (lapsedTime < (2*24*60*60)) {
return '1 day';
} else if (lapsedTime < (7*24*60*60)) {
return Math.round(lapsedTime / 86400) + ' days';
} else if (lapsedTime < (2*7*24*60*60)) { // Missed this case
return '1 week';
} else {
return Math.round(lapsedTime / 604800) + ' weeks';
}
我同意更好的方法是计算周,日,小时,分钟,并使用它们来格式化字符串:
function formatTime(t, tStr) {
// Singular case
if(t==1) { return t+' '+tStr; }
// Plural case
return t+' '+tStr+'s';
}
function timeString(lapsedTime) {
// These could be "round" or "floor", depending on what you want
var minutes = Math.floor(lapsedTime/60);
var hours = Math.floor(lapsedTime/3600);
var days = Math.floor(lapsedTime/86400);
var weeks = Math.floor(lapsedTime/604800);
var years = Math.floor(lapsedTime/31536000);
if(minutes == 0) { return '< 1 minute'; }
if(hours == 0) { return formatTime(minutes, 'minute'); }
if(days == 0) { return formatTime(hours, 'hour'); }
if(weeks == 0) { return formatTime(days, 'day'); }
if(years == 0) { return formatTime(weeks, 'week'); }
return formatTime(years, 'year');
}
答案 1 :(得分:1)
你不需要写“elseif”因为一旦返回值,函数就不再执行了,所以写它是安全的:
if (time < 60) return '< 1 minute';
if (time < 120) return '1 minute';
if (time < 60*60) ...
...
另一个错误是你做了几个小时,但不是几分钟,几天和几周。 正如我在评论中写道,还有一个小时错字,你有12 * 60 * 60 - 我认为你的意思是2 * 60 * 60
答案 2 :(得分:0)
从技术上讲,你所拥有的是正确的。然而,这种化合物if
是一场噩梦:根本不易理解它的作用,或者它是否正常工作,没有想到。
您可能希望预先计算所有周/日/小时/等值,然后使用这些值来提高代码的可读性:请查看my answer here示例。
在你的情况下,你会这样做:
var weeks = Math.round(lapsedTime / 604800);
var days = Math.round(lapsedTime / 86400);
// etc for the other quantities
if (weeks >= 1) {
return weeks + " weeks";
}
else if (days >= 1) {
return days + " days";
}
// etc
我认为您会同意这更容易理解并验证其正确性。
编辑:在扫描问题时遇到明显的问题,我设法错过了其他人指出的错误。我认为这说的是:a)我是一个草率的快速读者,b)确实很难验证if
这样的人。 : - )