这是我用于Javascript倒数计时器的代码:
<script type="text/javascript">
function ShowTimes1() {
var now = new Date();
if (now.getHours() < 6) {
newVar = 5
} else if (now.getHours() < 12) {
newVar = 11
} else if (now.getHours() < 18) {
newVar = 17
} else {
newVar = 23
}
var hrs = newVar - now.getHours();
var mins = 59 - now.getMinutes();
var secs = 59 - now.getSeconds();
var str = '';
str += '<b><a href="discount.php" style="text-decoration:none;cursor:default;"><span style="color:#FF9600;">Limited Time Offer!</span> <span style="color:#489FDC;">' + hrs + ' Hours ' + mins + ' Minutes ' + secs + ' Seconds</span></a></b>';
document.getElementById('countdownToMidnight').innerHTML = str
}
var _cntDown;
function StopTimes() {
clearInterval(_cntDown)
}
</script>
除了一件事之外,它几乎完美无缺。当只有1时,它总是显示“小时”,“分钟”和“秒”而不是单数形式。例如,我希望它显示“1秒”而不是“1秒”。
这是处理显示该文本的代码的特定部分:
'+hrs+' Hours '+mins+' Minutes '+secs+' Seconds
有没有简单的方法来修复我的代码才能实现这一目标?
答案 0 :(得分:4)
使用Ternary operator
简化您的工作。
尝试,
'+ hrs +' Hour' + ((hrs>1)?'s':'') +mins+' Minute' + ((mins>1)?'s':'') +secs+' Second' + ((secs>1)?'s':'')
全行代码:
str += '<b><a href="discount.php" style="text-decoration:none;cursor:default;"><span style="color:#FF9600;">Limited Time Offer!</span> <span style="color:#489FDC;">'+ hrs +' Hour' + ((hrs>1)?'s':'') +mins+' Minute' + ((mins>1)?'s':'') +secs+' Second' + ((secs>1)?'s':'')+ ' Seconds</span></a></b>';
答案 1 :(得分:0)
'+ hrs +'小时'+分钟+'分钟'+秒+'秒 成为
// ...
' + hrs + ' Hour' + (1===hrs) ? ' ' : 's '
+ mins + ' Minute' + (1===mins) ? ' ' : 's '
+ secs + ' Second' + (1===secs) ? ' ' : 's'
// ...
答案 2 :(得分:0)
对于这种微不足道的案例,使用三元运算符是可以的。但是,它不适用于多种语言,翻译您的应用程序非常困难。
为了解决这些用例,我实现了一个小型库,可以用来复制JavaScript中的单词。它透明地将CLDR数据库用于多个语言环境,因此它几乎支持您要使用的任何语言。它的API非常简约,集成非常简单。我打电话给它 - Numerous。
这是一篇关于它的简短介绍性文章:«How to pluralize any word in different languages using JavaScript?»。
随意在您的项目中使用它。我也很乐意收到您的反馈意见!