2009-02-03 35 views
4

我一直在玩jquery,我已經把自己變成了一個時間問題。我有3個時間輸入選擇框,一個小時,一個分鐘,一個爲子午線。我需要將此時間轉換爲24小時字符串格式,然後將其粘貼到隱藏的輸入中。什麼是一個簡單的方法來在上午/下午時間之間轉換在JavaScript中的時間到達24小時的時間

var time = ""; 
time += $("#EventCloseTimeHour option:selected").text(); 
time += ":" + $("#EventCloseTimeMin option:selected").text() + ":00"; 
time += " " + $("#EventCloseTimeMeridian option:selected").text(); 

$("#ConditionValue").val(time);   

這給我「下午1:30:00」,我需要「13:30:00」。任何快速的JavaScript時間提示?

+0

我要補充我最近發現了datejs和它驚人的 - 如果你想包括一個單一的問題,整個日期庫(如上),你應該想,但是我做了很多日期數學,所以它更有用。 http://www.datejs.com/ – reconbot 2009-02-11 00:27:32

回答

8

tj111建議:

$("#ConditionValue").val(
    (
     new Date(
      "01/01/2000 " + 
      $("#EventCloseTimeHour option:selected").text() + 
      $("#EventCloseTimeMin option:selected").text() + ":00" + 
      " " + 
      $("#EventCloseTimeMeridian option:selected").text() 
     ) 
    ).toTimeString().slice(0,8)) 
; 

或者您可以使用:

hour = hour %12 + (meridian === "AM"? 0 : 12); 
hour = hour < 10 ? "0" + hour : hour; 
1

您應該查看本機JavaScript Date Object方法。

+0

有沒有方法可以輸入子午線(am/pm)? – reconbot 2009-02-03 20:26:16

+0

如果使用Date.parse方法,它將接受字符串中的AM/PM(但需要在它前面有一個完整的日期)。 – tj111 2009-02-03 20:30:18

+0

它似乎沒有與日期解析工作 - 我一直得到無效的日期格式 – reconbot 2009-02-03 21:04:58

1
var time = ""; 
var hour = Number($("#EventCloseTimeHour option:selected").text())%12 + ($("#EventCloseTimeMeridian option:selected").text() == 'PM'?12:0)) ; 


time +=("00"+String(hour)).slice(-2)+":"+ $("#EventCloseTimeMin option:selected").text(); 

該解決方案的關鍵是使用條件運算符 「A B:C」 轉換爲 「如果A然後B,否則c」

實施例的
0

我收到了幾個人的答案。

var time = ""; 
var hour = Number($("#EventCloseTimeHour option:selected").text()); 
if($("#EventCloseTimeMeridian option:selected").text() == 'PM'){ 
    hour = String((hour%12) + 12); 
} 
hour = hour < 10 ? "0" + hour : hour; 
time +=hour+":"+ $("#EventCloseTimeMin option:selected").text() + ":00"; 
0

只是添加一個普通的JS答案,以下將根據初始字符串的長度格式化時間。如果h:mm返回HH:mm,如果h:mm:ss返回HH:mm:ss。

如果始終需要HH:mm:ss,如果初始字符串中不存在,則添加「:00」的默認秒數很簡單。

// Change time in h:mm:ss ap to HH:mm:ss time 
 
// If time missing seconds, returns HH:mm 
 
function timeToHHmm(time) { 
 
    var nums = time.match(/\d+/g); 
 
    var am = /am/i.test(time); 
 
    nums[0] = ('0' + ((nums[0]%12) + (am? 0 : 12))).slice(-2); 
 
    // If HH:mm:ss required, use following line instead of last 
 
    // return nums.join(':') + (nums.length == 2? ':00' : ''); 
 
    return nums.join(':'); 
 
} 
 

 
// Some tests 
 
['2:45am',  // hh:mm only 
 
'5:15:45pm', // hh:mm:ss 
 
'5:15:45 pm', // space before am/pm 
 
'05:15:45 pm',// leading zero on hour 
 
'12:02am', 
 
'12:02 pm', 
 
'12:02:00am' 
 
].forEach(function(time) { 
 
    console.log(time + ' => ' + timeToHHmm(time)); 
 
});

相關問題