2012-02-26 22 views
0

我有一个if语句来改变时间回到12击中后11:45:有时间回到12不为0

 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:00之后它将显示为0:15,0:30,0:45。取而代之的12:15,12:30,12:45

我认为这部分的if语句会做到这一点:

hours = (hours == 0) ? 12 

,但不工作?

+0

你可以把它放在jsFiddle上吗? “ – MyStream 2012-02-26 22:19:04

回答

7

最简单的方法可能是

hours = (hours % 12) || 12; 

这样了几小时任意正整数科佩斯(如36仍然会返回12)。

+0

这很好,但意识到我需要在12:45时解决,而不是在我的交换机中显示12:45 - 13PM,你可以在switch语句中使用if语句来获取它吗? – Xtian 2012-02-26 22:28:59

+0

+1。很好的选择。 @ Xtian:你可以在你的'case'里放一个'if',或者在Dave的代码中使用一个变体:'nextHours =(hours + 1)%12 || 12;' – nnnnnn 2012-02-26 22:31:14

+0

美丽!谢谢@nnnnnn – Xtian 2012-02-26 22:36:13

1
hours = (hours == 0) ? 12 : hours; 

是三元条件的完整用法。但为什么你不使用简单的if语句?

if(hours == 0) 
    hours = 12; 
+1

”是三元条件的正确用法“---是吗?为什么OP的使用不正确?从哪个角度看,你的“更正确”(只要它做**另一项工作**)? – zerkms 2012-02-26 22:21:12

+1

问题中的代码完全正确地使用了三元条件,它只是测试的实际情况并不完全正确(请参阅cchana的回答)。 – nnnnnn 2012-02-26 22:30:35

3

它应该阅读

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

通过具有> =你目前包括12多项,从扣除12。