2009-02-03 51 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)); 
 
});

相关问题