Javascript 让时间回到12点而不是0点

Javascript 让时间回到12点而不是0点,javascript,time,Javascript,Time,我有一个if语句,在时间到达11:45后将时间更改回12:00: i = (i >= 192) ? i - 192 : ( i >= 96) ? i - 96 : i var mins = (i * 15 % 60) var hours = Math.floor(i * 15 / 60) var ampm = (hours >= 12) ? "PM" : "AM" hours = (hours

我有一个if语句,在时间到达11:45后将时间更改回12:00:

        i = (i >= 192) ? i - 192 : ( i >= 96) ? i - 96 : i
        var mins = (i * 15 % 60)
        var hours = Math.floor(i * 15 / 60)
        var ampm = (hours >= 12) ? "PM" : "AM"


        hours = (hours == 0) ? 12 : (hours >= 12) ? hours - 12 : hours;


        var nextMins, nextHours = hours;
        switch (mins) {
            case 0:
                mins = "";
                nextMins = 15;
                break;
            case 45:
                nextMins = "";
                nextHours = hours+1;
                break;
            default:
                nextMins = mins + 15;
                break;

        }

        var time = hours + (mins == "" ? "" : ":" + mins) + " - " + nextHours + (nextMins == "" ? "" : ":" + nextMins) + ampm
它以15分钟的间隔变化,问题是它将在12点开始,但在它再次到达12点后,它将显示为0:15、0:30、0:45。而不是12:15,12:30,12:45

我认为if语句的这一部分可以做到:

hours = (hours == 0) ? 12
但这不管用吗

hours = (hours == 0) ? 12 : hours;
是三元条件的完整用法。但是为什么不使用一个简单的if语句呢

if(hours == 0)
  hours = 12;
应该是

hours = (hours == 0) ? 12 : (hours > 12) ? hours - 12 : hours;

通过使用>=您当前将12作为一个数字,从中扣除12。

最简单的方法可能是

hours = (hours % 12) || 12;

这种方法可以处理数小时内的任何正整数(例如,36仍将返回12)。

你能把它放在JSFIDLE上吗?“三元条件的正确用法是吗?”——那么?为什么OP的用法不正确?从哪个角度看,你的一个是“更正确的”(只要它能做另一个工作)?问题中的代码完全正确地使用了三元条件,只是测试的实际条件不太正确(参见cchana的答案)。这很有效,但我意识到我需要在12:45时进行处理,而不是在我的交换机中显示12:45-13PM,你能在switch语句中使用if语句来理解它吗?+1。不错的选择@Xtian:你可以在你的
盒子里放一个
if
,或者在Dave的代码上使用一个变体:
nextHours=(小时+1)%12 | | 12漂亮!谢谢@nnnnnn顺便说一句。您可以将代码的第一行完全替换为
i%=96