Вопрос по date, javascript, time – изменить строку времени ЧЧ: мм утра / вечера до 24 часов

1

Я получаю переменную строку примерно так:

8:45

И хочу, если это вечера, чтобы преобразовать его в 24-часовое время. Так что я могу затем бросить AM / PM и использовать его с чем-то другим.

Я могу бросить AM / PM довольно легко, как это:

function replaceEnds(string) {
        string = string.replace("am", "");
        string = string.replace("pm", "");
        return string;
    }

Но, конечно, если я это сделаю, я не знаю, будет ли строка am или pm, поэтому я не знаю, добавить ли это 12 часов к строке, чтобы сделать ее 24-часовой.

Кто-нибудь знает, как я мог решить это? Я абсолютно не могу изменить ввод, который я получаю от переменной, это всегда будет час (через 12 часов), минуты, и я или вечера.

Ваш Ответ

4   ответа
5

Без использования каких-либо дополнительных библиотек JavaScript:

/**
 * @var amPmString - Time component (e.g. "8:45 PM")
 * @returns - 24 hour time string
 */
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"
0

Я использую что-то похожее на это

//time is an array of [hh] & [mm am/pm] (you can get this by time = time.split(":");
function MilitaryTime(time){
if(time[1].indexOf("AM")!=-1){
//its in the morning, so leave as is
  return time;
}else if(time[0]!="12"){
//If it is beyond 12 o clock in the after noon, add twelve for military time.
  time[0]=String(parseInt(time[0])+12);
  return time;
}
else{
return time;
}
}

Как только вы вернете свое время, вы можете изменить текст любым удобным вам способом.

Это решение не учитывает 12:00 -> 00:00, и parseInt не будет работать в старых браузерах (например, Firefox 3.6) с вводом '09'. Видетьjsfiddle.net/j2xc6/1, -> нажмите кнопку jshint на скрипке, чтобы понять, почему. forivall
Ах, черт возьми! Это то, что происходит, когда я кодирую по памяти. Спасибо за улов, вспомню в следующий раз. ElliotM
1

которое преобразует ЛЮБОЙ ФОРМАТ в 24 часа в формате ЧЧ: ММ.

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
5

С помощьюmoment.js:

moment(string, 'h:mm a').format('H:mm');

Если вы хотите сделать это вручную, это будет моим решением:

function to24Hour(str) {
    var tokens = /([10]?\d):([0-5]\d) ([ap]m)/i.exec(str);
    if (tokens == null) { return null; }
    if (tokens[3].toLowerCase() === 'pm' && tokens[1] !== '12') {
        tokens[1] = '' + (12 + (+tokens[1]));
    } else if (tokens[3].toLowerCase() === 'am' && tokens[1] === '12') {
        tokens[1] = '00';
    }
    return tokens[1] + ':' + tokens[2];
}

Ручное решение труднее понять, оно менее гибкое, не требует некоторой проверки ошибок и нуждается в модульных тестах. В целом, вы должны предпочитать решение хорошо протестированной популярной библиотеки, а не свое (если имеется хорошо протестированная библиотека).

Быстро и просто, спасибо :) Выберу ответ за 2 минуты David G

Похожие вопросы