将 12 小时 hh:mm AM/PM 转换为 24 小时 hh:mm

IT技术 javascript jquery
2021-01-29 20:12:32

有没有什么简单的方法可以使用 jquery 将 12 小时 hh:mm AM/PM 转换为 24 小时 hh:mm?

注意:不使用任何其他库。

我有一个var time = $("#starttime").val()返回 hh:mm AM/PM 的。

6个回答

试试这个

var time = $("#starttime").val();
var hours = Number(time.match(/^(\d+)/)[1]);
var minutes = Number(time.match(/:(\d+)/)[1]);
var AMPM = time.match(/\s(.*)$/)[1];
if(AMPM == "PM" && hours<12) hours = hours+12;
if(AMPM == "AM" && hours==12) hours = hours-12;
var sHours = hours.toString();
var sMinutes = minutes.toString();
if(hours<10) sHours = "0" + sHours;
if(minutes<10) sMinutes = "0" + sMinutes;
alert(sHours + ":" + sMinutes);
我也会推荐 (AMPM.toLowerCase() == "am")
2021-03-17 20:12:32
if(AMPM == "AM" && hours==12) hours = 0; 我想更直接
2021-04-09 20:12:32
失败,例如晚上 10 点
2021-04-10 20:12:32
OP 特别要求 hh:mm XX 格式,所以晚上 10 点应该是晚上 10:00,它会起作用
2021-04-10 20:12:32
你的回答刚刚救了我,伙计..继续做好工作..谢谢你的回答..实际上我需要在另外 10 分钟内交付我的项目,但我需要几秒钟来感谢你
2021-04-10 20:12:32

这个问题需要一个更新的答案:)

const convertTime12to24 = (time12h) => {
  const [time, modifier] = time12h.split(' ');

  let [hours, minutes] = time.split(':');

  if (hours === '12') {
    hours = '00';
  }

  if (modifier === 'PM') {
    hours = parseInt(hours, 10) + 12;
  }

  return `${hours}:${minutes}`;
}

console.log(convertTime12to24('01:02 PM'));
console.log(convertTime12to24('05:06 PM'));
console.log(convertTime12to24('12:00 PM'));
console.log(convertTime12to24('12:00 AM'));

@GregRTaylor 不,然后它会输出例如。24:1212:12 PM
2021-03-15 20:12:32
@snow 可能答案已更改,但现在它在上午 12 点给出 00:00,因此它似乎没有问题
2021-03-16 20:12:32
12:00 AM 示例的代码错误:修复 if (hours === '12' && modifier === 'PM') { hours = '00'; } , PM = post meridiem so 下午
2021-03-18 20:12:32
如果(小时 === '12'){ 小时 = '00'; 你不是也想在这里检查修饰符吗?(AM 或 PM) if (hours === '12' && 修饰符 === 'AM') { hours = '00'; }
2021-04-05 20:12:32
@Learner 它没有改变。它一直在正常工作:)
2021-04-08 20:12:32

我不得不做类似的事情,但我正在生成一个Date对象,所以我最终制作了一个这样的函数:

function convertTo24Hour(time) {
    var hours = parseInt(time.substr(0, 2));
    if(time.indexOf('am') != -1 && hours == 12) {
        time = time.replace('12', '0');
    }
    if(time.indexOf('pm')  != -1 && hours < 12) {
        time = time.replace(hours, (hours + 12));
    }
    return time.replace(/(am|pm)/, '');
}

我觉得这读起来容易一些。您输入格式为 h:mm am/pm 的字符串。

    var time = convertTo24Hour($("#starttime").val().toLowerCase());
    var date = new Date($("#startday").val() + ' ' + time);

例子:

        $("#startday").val('7/10/2013');

        $("#starttime").val('12:00am');
        new Date($("#startday").val() + ' ' + convertTo24Hour($("#starttime").val().toLowerCase()));
        Wed Jul 10 2013 00:00:00 GMT-0700 (PDT)

        $("#starttime").val('12:00pm');
        new Date($("#startday").val() + ' ' + convertTo24Hour($("#starttime").val().toLowerCase()));
        Wed Jul 10 2013 12:00:00 GMT-0700 (PDT)

        $("#starttime").val('1:00am');
        new Date($("#startday").val() + ' ' + convertTo24Hour($("#starttime").val().toLowerCase()));
        Wed Jul 10 2013 01:00:00 GMT-0700 (PDT)

        $("#starttime").val('12:12am');
        new Date($("#startday").val() + ' ' + convertTo24Hour($("#starttime").val().toLowerCase()));
        Wed Jul 10 2013 00:12:00 GMT-0700 (PDT)

        $("#starttime").val('3:12am');
        new Date($("#startday").val() + ' ' + convertTo24Hour($("#starttime").val().toLowerCase()));
        Wed Jul 10 2013 03:12:00 GMT-0700 (PDT)

        $("#starttime").val('9:12pm');
        new Date($("#startday").val() + ' ' + convertTo24Hour($("#starttime").val().toLowerCase()));
        Wed Jul 10 2013 21:12:00 GMT-0700 (PDT)

这将有助于:

 function getTwentyFourHourTime(amPmString) { 
        var d = new Date("1/1/2013 " + amPmString); 
        return d.getHours() + ':' + d.getMinutes(); 
    }

例子 :

getTwentyFourHourTime("8:45 PM"); // "20:45"
getTwentyFourHourTime("8:45 AM"); // "8:45"

更新: 注意:“时间”和“上午/下午”之间应该有一个时间字符串的空格。

根据 MDN,使用带有字符串的 Date 构造函数“由于浏览器差异和不一致而强烈不鼓励”。
2021-03-16 20:12:32

这里我的解决方案包括秒:

function convert_to_24h(time_str) {
    // Convert a string like 10:05:23 PM to 24h format, returns like [22,5,23]
    var time = time_str.match(/(\d+):(\d+):(\d+) (\w)/);
    var hours = Number(time[1]);
    var minutes = Number(time[2]);
    var seconds = Number(time[3]);
    var meridian = time[4].toLowerCase();

    if (meridian == 'p' && hours < 12) {
      hours += 12;
    }
    else if (meridian == 'a' && hours == 12) {
      hours -= 12;
    }
    return [hours, minutes, seconds];
  };
hours += 12hours -= 12:-)
2021-03-26 20:12:32