2014-05-23 85 views
2

如何顯示下方,使用JavaScript中循環?:如何在12小時上午/下午格式中添加24小時選項?

<option value="00">00 AM</option> 
    <option value="01">01 AM</option> 
    <option value="02">02 AM</option> 
    . 
    . 
    . 
    <option value="21">09 PM</option> 
    <option value="22">10PM</option> 
    <option value="23">11PM</option> 

我有這個到目前爲止已經試過:

for (var i = 0, j = 0; i < 12, j < 24; i++, j++) { 
    console.log(this.addZero(i) + "AM"); 
    console.log(j); 
    if (i > 11) { 
     console.log() 
    } 
    $("#fromHour").append("<option value='" + this.addZero(i) + "'>" + this.addZero(i) + "AM</option>") 
    $("#toHour").append("<option value='" + this.addZero(i) + "'>" + this.addZero(i) + "AM</option>"); 
} 

i後大於11它應該顯示PM和值應爲遞增。

如何做到這一點?

+0

如果你不能在一個循環內做到這一點,爲什麼你不使用2循環? – micnic

回答

1

如果你想有一個顯示01 AM, 02 AM...11 AM, 12 PM, 01 PM...11 PM, 12 AM一個下拉菜單,你可以這樣做與此類似:

// no idea what your addZero() looks like, I just poly-filled it for demo to work. 
window.addZero = function(value){ 
    var pad = '00'; 

    return pad.substring(0, pad.length - value.toString().length) + value; 
} 

for (var i = 1; i < 25; i++) { 
    var am = 'AM', 
     pm = 'PM', 
     ampm, 
     timeUnit, 
     timeValue, 
     timeStamp; 

    timeUnit = i > 12 ? i - 12 : i; 
    ampm = i < 12 || i > 23 ? am : pm; 

    timeValue = this.addZero(timeUnit); 
    timeStamp = timeValue + ' ' + ampm; 

    optionMarkup = "<option value='" + timeValue + "'>" + timeStamp + "</option>"; 


    $("#fromHour").append(optionMarkup); 
    $("#toHour").append(optionMarkup); 

    // if you want to have the last 12 AM to be at the top use the below and remove above append: 
    //if(i === 24){ 
    // $("#fromHour").prepend(optionMarkup); 
    // $("#toHour").prepend(optionMarkup); 
    //} else{ 
    // $("#fromHour").append(optionMarkup); 
    // $("#toHour").append(optionMarkup); 
    //} 
} 

DEMO - 使用12個小時格式與AM創建24小時時間選項/ PM


1
  1. 具有可變,ampm,其具有在它"AM"開始進行。

  2. for循環條件(逗號使得for循環無效後)中刪除i < 12

  3. 在循環的頂部

    if (i === 12) { 
        ampm = "PM"; 
    } 
    else if (i > 12) { 
        i -= 12; 
    } 
    

然後使用j該選項值的一部分,而不是i,並使用iampm用於顯示。

1

從你的代碼,我猜,這就是你實際上是試圖做:

var tp = "AM"; 

for(var i = 0; i < 24; i++) { 

    var t = i; 

    if (i == 12) { 
     tp = "PM"; 
    } else if (i > 12) { 
     t -= 12; 
    } 

    console.log(this.addZero(t) + tp); 

    $("#fromHour").append("<option value='" 
     + this.addZero(i) + "'>" + this.addZero(t) + tp + "</option>"); 
    $("#toHour").append("<option value='" 
     + this.addZero(i) + "'>" + this.addZero(t) + tp + "</option>"); 
} 

它有助於當你嘗試格式化您的代碼,使其儘可能地易讀。

+0

這將顯示「23 PM」作爲選項。我認爲普里亞想把24小時制的時間變成12,並附上一天的時間。 – Josh

+0

@Josh,夠公平的。我修改了我的代碼 – neelsg

1

有幾種方法可以做到這一點。這是您開始使用的代碼的簡單方法。

var i = 0; 
var dayHalf = "AM"; 
for(j=0;j<24;j++){ 
    i = j == 0 ? 12 : j > 12 ? j - 12 : j; 
    dayHalf = j < 12 ? "AM" : "PM"; 

    console.log(this.addZero(i) + dayHalf); 
    console.log(j); 

    $("#fromHour").append("<option value='"+this.addZero(i)+"'>"+this.addZero(i) + dayHalf"</option>") 
    $("#toHour").append("<option value='"+this.addZero(i)+"'>"+this.addZero(i) + dayHalf"</option>"); 
} 

您並不需要'我'或'dayHalf'變量,但爲了清晰起見,我將它們包括在內。

相關問題