使用Javascript的奇异VS多个单词?

时间:2013-12-14 16:11:38

标签: javascript jquery html

这是我用于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

有没有简单的方法来修复我的代码才能实现这一目标?

3 个答案:

答案 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?»。

随意在您的项目中使用它。我也很乐意收到您的反馈意见!