Есть ли простой способ преобразования 12-часового чч: мм AM/PM в 24-часовой чч: мм с помощью jquery?
Примечание. Не используйте другие библиотеки.
У меня есть var time = $("#starttime").val()
, который возвращает чч: мм AM/PM.
Есть ли простой способ преобразования 12-часового чч: мм AM/PM в 24-часовой чч: мм с помощью jquery?
Примечание. Не используйте другие библиотеки.
У меня есть var time = $("#starttime").val()
, который возвращает чч: мм AM/PM.
Попробуйте это
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);
На этот вопрос нужен более новый ответ :)
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'));
Мне нужно было сделать что-то подобное, но я создавал объект 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 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];
};
Это поможет:
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"
Обновление: Примечание. Должно быть место для timestring между "Time" и "am/pm".
Мне нужна эта функция для проекта. Я пробовал devnull69, но у меня были некоторые проблемы, главным образом потому, что ввод строки очень специфичен для секции am/pm, и мне нужно было бы изменить мою проверку. Я столкнулся с Adrian P. jsfiddle и получил версию, которая, кажется, работает лучше для большего разнообразия форматов даты. Вот скрипка: http://jsfiddle.net/u91q8kmt/2/.
Вот функция:
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;
}
}
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)/, '');
}
Вызвать функцию со строковыми параметрами:
timeConversion('17:05:45AM')
или
timeConversion('07:05:45PM')
Если вы ищете решение, которое преобразует ЛЮБОЙ ФОРМАТ в 24 часа HH: MM правильно.
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 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
При этом вы можете получить следующее: Пример ввода: 19:05:45 Пример вывода: 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;
}
Надеюсь, вам понравится!
на основе собрания CodeSkill # 1
валидация формата должна быть другой функцией:)
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"));
Я должен рекомендовать библиотеку: Moment
код:
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'));
Я создал небольшую адаптацию script @devnull69. Я чувствовал, что для моего приложения это было бы более полезно как функция, которая возвращала бы значение, которое я могла, а затем использовала бы в качестве переменной.
HTML
<input type="text" id="time_field" />
<button>Submit</submit>
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;
}
</script>
</head>
<body>
<input type="button" value="click" onclick="getDisplayDatetime()">
<input type="text" id="txt"/>
dateFormat.masks.armyTime= 'HH:MM';
now.format("armyTime");
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
Вы можете попробовать эту более общую функцию:
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));
}
Обратите внимание, что он использует некоторые функции 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);
Для тех, кто читает это в будущем, вот более простой ответ:
var s = "11:41:02PM";
var time = s.match(/\d{2}/g);
if (time[0] === "12") time[0] = "00";
if (s.indexOf("PM") > -1) time[0] = parseInt(time[0])+12;
return time.join(":");
простая и простая функция js для вычисления меридиана времени в реальном времени
JS
function convertTime24to12(time24h) {
var timex = time24h.split(':');
if(timex[0] !== undefined && timex [1] !== undefined)
{
var hor = parseInt(timex[0]) > 12 ? (parseInt(timex[0])-12) : timex[0] ;
var minu = timex[1];
var merid = parseInt(timex[0]) < 12 ? 'AM' : 'PM';
var res = hor+':'+minu+' '+merid;
document.getElementById('timeMeridian').innerHTML=res.toString();
}
}
Html
<label for="end-time">Hour <i id="timeMeridian"></i> </label>
<input type="time" name="hora" placeholder="Hora" id="end-time" class="form-control" onkeyup="convertTime24to12(this.value)">
Решение для машинописи, основанное на @krzysztof-dÄ… browski answer
export interface HoursMinutes {
hours: number;
minutes: number;
}
export function convert12to24(time12h: string): HoursMinutes {
const [time, modifier] = time12h.split(' ');
let [hours, minutes] = time.split(':');
if (hours === '12') {
hours = '00';
}
if (minutes.length === 1) {
minutes = '0${minutes}';
}
if (modifier.toUpperCase() === 'PM') {
hours = parseInt(hours, 10) + 12 + '';
}
return {
hours: parseInt(hours, 10),
minutes: parseInt(minutes, 10)
};
}
Протестировано для всех случаев использования
function timeConversion(s) {
let h24;
let m24;
let sec24;
const splittedDate = s.split(":");
const h = parseInt(splittedDate[0], 10);
const m = parseInt(splittedDate[1], 10);
const sec = parseInt(splittedDate[2][0] + splittedDate[2][1], 10);
const meridiem = splittedDate[2][2] + splittedDate[2][3];
if (meridiem === "AM") {
if (h === 12) {
h24 = '00';
} else {
h24 = h;
if (h24 < 10) {
h24 = '0' + h24;
}
}
m24 = m;
sec24 = sec;
} else if (meridiem === "PM") {
if (h === 12) {
h24 = h
} else {
h24 = h + 12;
if (h24 < 10) {
h24 = '0' + h24;
}
}
m24 = m;
sec24 = sec;
}
if (m24 < 10) {
m24 = '0' + m24;
}
if (sec24 < 10) {
sec24 = '0' + sec24;
}
return h24 + ":" + m24 + ":" + sec24;
}
convertTime12to24 = (time12h) => {
const [time, modifier] = time12h.split(' ');
let [hours, minutes] = time.split(':');
(hours === '12' ? hours = '00' : ((modifier === 'PM' || modifier === 'pm') ? hours = parseInt(hours, 10) + 12 : ""));
return '${hours}:${minutes}';
}
console.log(convertTime12to24('06:30 pm'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>