convertire 12 ore hh: mm AM / PM a 24 ore hh: mm

c’è un modo semplice per convertire hh da 12: mm AM / PM a 24 ore hh: mm usando jquery?

nota: nessun utilizzo di altre librerie.

ho una var time = $("#starttime").val() che restituisce un hh: mm AM / PM.

Prova questo

 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); 

Dovevo fare qualcosa di simile ma stavo generando un object Date quindi ho finito per fare una funzione come questa:

 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)/, ''); } 

Penso che questo sia un po 'più semplice. Si alimenta una stringa nel formato h: mm am / pm.

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

Esempi:

  $("#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) 

Questa domanda ha bisogno di una nuova risposta 🙂

 function 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')); 

Ecco la mia soluzione compresi i secondi:

 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]; }; 

Questo aiuterà :

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

Esempio :

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

Aggiornamento: Nota: dovrebbe esserci uno spazio per il timestring tra “Ora” e “am / pm”.

Avevo bisogno di questa funzione per un progetto. Ho provato i devnull69 ma ho avuto qualche problema, soprattutto perché l’input delle stringhe è molto specifico per la sezione am / pm e avrei dovuto cambiare la mia convalida. Ho scherzato con jsfiddle di Adrian P. e ho finito con una versione che sembra funzionare meglio per una più ampia varietà di formati di data. Ecco il violino: http://jsfiddle.net/u91q8kmt/2/ .

Ecco la funzione:

 function ConvertTimeformat(format, str) { var hours = Number(str.match(/^(\d+)/)[1]); var minutes = Number(str.match(/:(\d+)/)[1]); var AMPM = str.match(/\s?([AaPp][Mm]?)$/)[1]; var pm = ['P', 'p', 'PM', 'pM', 'pm', 'Pm']; var am = ['A', 'a', 'AM', 'aM', 'am', 'Am']; if (pm.indexOf(AMPM) >= 0 && hours < 12) hours = hours + 12; if (am.indexOf(AMPM) >= 0 && 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; if (format == '0000') { return (sHours + sMinutes); } else if (format == '00:00') { return (sHours + ":" + sMinutes); } else { return false; } } 

Nel caso tu stia cercando una soluzione che converta QUALSIASI FORMATO a 24 ore HH: MM correttamente.

 function get24hTime(str){ str = String(str).toLowerCase().replace(/\s/g, ''); var has_am = str.indexOf('am') >= 0; var has_pm = str.indexOf('pm') >= 0; // first strip off the am/pm, leave it either hour or hour:minute str = str.replace('am', '').replace('pm', ''); // if hour, convert to hour:00 if (str.indexOf(':') < 0) str = str + ':00'; // now it's hour:minute // we add am/pm back if striped out before if (has_am) str += ' am'; if (has_pm) str += ' pm'; // now its either hour:minute, or hour:minute am/pm // put it in a date object, it will convert to 24 hours format for us var d = new Date("1/1/2011 " + str); // make hours and minutes double digits var doubleDigits = function(n){ return (parseInt(n) < 10) ? "0" + n : String(n); }; return doubleDigits(d.getHours()) + ':' + doubleDigits(d.getMinutes()); } console.log(get24hTime('6')); // 06:00 console.log(get24hTime('6am')); // 06:00 console.log(get24hTime('6pm')); // 18:00 console.log(get24hTime('6:11pm')); // 18:11 console.log(get24hTime('6:11')); // 06:11 console.log(get24hTime('18')); // 18:00 console.log(get24hTime('18:11')); // 18:11 

basato sull’incontro con CodeSkill # 1

la convalida del formato dovrebbe essere un’altra funzione 🙂

 function convertTimeFrom12To24(timeStr) { var colon = timeStr.indexOf(':'); var hours = timeStr.substr(0, colon), minutes = timeStr.substr(colon+1, 2), meridian = timeStr.substr(colon+4, 2).toUpperCase(); var hoursInt = parseInt(hours, 10), offset = meridian == 'PM' ? 12 : 0; if (hoursInt === 12) { hoursInt = offset; } else { hoursInt += offset; } return hoursInt + ":" + minutes; } console.log(convertTimeFrom12To24("12:00 AM")); console.log(convertTimeFrom12To24("12:00 PM")); console.log(convertTimeFrom12To24("11:00 AM")); console.log(convertTimeFrom12To24("01:00 AM")); console.log(convertTimeFrom12To24("01:00 PM")); 

Con questo si può avere il seguente: Ingresso campione: 07:05:45 PM Uscita campione: 19:05:45

 function timeConversion(s) { let output = ''; const timeSeparator = ':' const timeTokenType = s.substr(s.length - 2 , 2).toLowerCase(); const timeArr = s.split(timeSeparator).map((timeToken) => { const isTimeTokenType = timeToken.toLowerCase().indexOf('am') > 0 || timeToken.toLowerCase().indexOf('pm'); if(isTimeTokenType){ return timeToken.substr(0, 2); } else { return timeToken; } }); const hour = timeArr[0]; const minutes = timeArr[1]; const seconds = timeArr[2]; const hourIn24 = (timeTokenType === 'am') ? parseInt(hour) - 12 : parseInt(hour) + 12; return hourIn24.toString()+ timeSeparator + minutes + timeSeparator + seconds; } 

Spero ti piaccia !

Ho creato un po ‘di adattamento di script @ devnull69 inviato. Ho pensato che per la mia applicazione sarebbe stato più utile come funzione che restituiva il valore che potevo, quindi usava come variabile.

HTML

   

jQuery

 $(document).ready(function(){ function convertTime(time) { var hours = Number(time.match(/^(\d\d?)/)[1]); var minutes = Number(time.match(/:(\d\d?)/)[1]); var AMPM = time.match(/\s(.AM|PM)$/i)[1]; if (AMPM == 'PM' || AMPM == 'pm' && hours<12) { hours = hours+12; } else if (AMPM == 'AM' || AMPM == "am" && hours==12) { hours = hours-12; } var sHours = hours.toString(); var sMinutes = minutes.toString(); if(hours<10) { sHours = "0" + sHours; } else if(minutes<10) { sMinutes = "0" + sMinutes; } return sHours + ":" + sMinutes; } $('button').click(function(){ alert(convertTime($('#time_field').val())); }); 
  function getDisplayDatetime() { var d = new Date("February 04, 2011 19:00"), hh = d.getHours(), mm = d.getMinutes(), dd = "AM", h = hh; mm=(mm.toString().length == 1)? mm = "0" + mm:mm; h=(h>=12)?hh-12:h; dd=(hh>=12)?"PM":"AM"; h=(h == 0)?12:h; var textvalue=document.getElementById("txt"); textvalue.value=h + ":" + mm + " " + dd; }      
 function convertTo24Hour(time) { time = time.toUpperCase(); 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)/, ''); } 
 date --date="2:00:01 PM" +%T 14:00:01 date --date="2:00 PM" +%T | cut -d':' -f1-2 14:00 var="2:00:02 PM" date --date="$var" +%T 14:00:02 

Potresti provare questa funzione più generica:

 function from12to24(hours, minutes, meridian) { let h = parseInt(hours, 10); const m = parseInt(minutes, 10); if (meridian.toUpperCase() === 'PM') { h = (h !== 12) ? h + 12 : h; } else { h = (h === 12) ? 0 : h; } return new Date((new Date()).setHours(h,m,0,0)); } 

Nota utilizza alcune funzionalità ES6.

  var time = "9:09:59AM" var pmCheck =time.includes("PM"); var hrs=parseInt(time.split(":")[0]); var newtime=''; // this is for between 12 AM to 12:59:59AM = 00:00:00 if( hrs == 12 && pmCheck == false){ newtime= "00" +':'+ time.split(":")[1] +':'+ time.split(":")[2].replace("AM",''); } //this is for between 12 PM to 12:59:59 =12:00:00 else if (hrs == 12 && pmCheck == true){ newtime= "12" +':'+ time.split(":")[1] +':'+ time.split(":")[2].replace("PM",''); } //this is for between 1 AM and 11:59:59 AM else if (!pmCheck){ newtime= hrs +':'+ time.split(":")[1] +':'+ time.split(":")[2].replace("AM",''); } //this is for between 1 PM and 11:59:59 PM else if(pmCheck){ newtime= (hrs +12)+':'+ time.split(":")[1] +':'+ time.split(":")[2].replace("PM",''); } console.log(newtime); 
 function timeConversion(s) { var time = s.toLowerCase().split(':'); var hours = parseInt(time[0]); var _ampm = time[2]; if (_ampm.indexOf('am') != -1 && hours == 12) { time[0] = '00'; } if (_ampm.indexOf('pm') != -1 && hours < 12) { time[0] = hours + 12; } return time.join(':').replace(/(am|pm)/, ''); } 

Chiama la funzione con parametri stringa:

 timeConversion('17:05:45AM') 

o

 timeConversion('07:05:45PM') 
 dateFormat.masks.armyTime= 'HH:MM'; now.format("armyTime"); 

devo raccomandare una biblioteca: Moment

codice:

 var target12 = '2016-12-08 9:32:45 PM'; console.log(moment(target12, 'YYYY-MM-DD h:m:s A').format('YYYY-MM-DD HH:mm:ss'));