Подтвердить что ты не робот

Преобразование 24-часового времени в 12-часовое время с AM и PM с использованием Javascript

Каков наилучший способ преобразования следующего возвращаемого значения JSON из 24-часового формата в 12-часовой формат w/AM и PM? Дата должна оставаться неизменной - время - это единственное, что нужно для форматирования.

February 04, 2011 19:00:00

P.S. Использование jQuery, если это становится проще! Также предпочла бы простую функцию/код и не использовать Date.js.

4b9b3361

Ответ 1

ОБНОВЛЕНИЕ 2: без секунд

ОБНОВЛЕНИЕ: AM после полудня исправлено, протестировано: http://jsfiddle.net/aorcsik/xbtjE/

Я создал эту функцию для этого:

function formatDate(date) {
  var d = new Date(date);
  var hh = d.getHours();
  var m = d.getMinutes();
  var s = d.getSeconds();
  var dd = "AM";
  var h = hh;
  if (h >= 12) {
    h = hh - 12;
    dd = "PM";
  }
  if (h == 0) {
    h = 12;
  }
  m = m < 10 ? "0" + m : m;

  s = s < 10 ? "0" + s : s;

  /* if you want 2 digit hours:
  h = h<10?"0"+h:h; */

  var pattern = new RegExp("0?" + hh + ":" + m + ":" + s);

  var replacement = h + ":" + m;
  /* if you want to add seconds
  replacement += ":"+s;  */
  replacement += " " + dd;

  return date.replace(pattern, replacement);
}

alert(formatDate("February 04, 2011 12:00:00"));

Ответ 2

Вот как вы можете менять часы без инструкции:

hours = ((hours + 11) % 12 + 1);

Ответ 3

    //it is pm if hours from 12 onwards
    suffix = (hours >= 12)? 'pm' : 'am';

    //only -12 from hours if it is greater than 12 (if not back at mid night)
    hours = (hours > 12)? hours -12 : hours;

    //if 00 then it is 12 am
    hours = (hours == '00')? 12 : hours;

Ответ 4

Для тех, кто читает, кто хочет ТОЛЬКО время на выходе, вы можете передать параметры JavaScript Date:: toLocaleString(). Пример:

var date = new Date("February 04, 2011 19:00:00");
var options = {
  hour: 'numeric',
  minute: 'numeric',
  hour12: true
};
var timeString = date.toLocaleString('en-US', options);
console.log(timeString);

Ответ 5

Здесь достаточно тонкий способ сделать это с использованием прототипа:

Date.prototype.getFormattedTime = function () {
    var hours = this.getHours() == 0 ? "12" : this.getHours() > 12 ? this.getHours() - 12 : this.getHours();
    var minutes = (this.getMinutes() < 10 ? "0" : "") + this.getMinutes();
    var ampm = this.getHours() < 12 ? "AM" : "PM";
    var formattedTime = hours + ":" + minutes + " " + ampm;
    return formattedTime;
}

Затем вам нужно всего лишь преобразовать значение строки в дату и использовать новый метод:

var stringValue = "February 04, 2011 19:00:00;
var dateValue = new Date(stringValue);
var formattedTime = dateValue.getFormattedTime();

Или в одной строке:

var formattedTime = new Date("February 04, 2011 19:00:00").getFormattedTime();

Ответ 6

function pad(num) {return ("0" + num).slice(-2);}
function time1() {
  var today = new Date(),
    h = today.getHours(),
    m = today.getMinutes(),
    s = today.getSeconds();
    
  h = h % 12;
  h = h ? h : 12; // the hour '0' should be '12'
  clk.innerHTML = h + ':' + 
    pad(m) + ':' + 
    pad(s) + ' ' + 
    (h >= 12 ? 'PM' : 'AM');
}
window.onload = function() {
  var clk = document.getElementById('clk');
  t = setInterval(time1, 500);
}
<span id="clk"></span>

Ответ 8

jQuery не имеет никаких утилит даты вообще. Если вы не используете какие-либо дополнительные библиотеки, обычный способ - создать объект JavaScript Date, а затем извлечь данные из него и отформатировать его самостоятельно.

Для создания объекта Date вы можете либо убедиться, что ваша строка даты в JSON находится в форме, которую понимает Date, что является стандартом IETF (который в основном RFC 822, раздел 5). Поэтому, если у вас есть шанс изменить JSON, это будет проще всего. (EDIT: ваш формат может работать так, как есть.)

Если вы не можете изменить свой JSON, вам нужно будет самостоятельно разобрать строку и получить день, рот, год, часы, минуты и секунды в виде целых чисел и создать с ней объект Date.

Как только у вас есть объект Date, вам нужно будет извлечь нужные данные и отформатировать его:

   var myDate = new Date("4 Feb 2011, 19:00:00");
   var hours = myDate.getHours();
   var am = true;
   if (hours > 12) {
      am = false;
      hours -= 12;
   } else (hours == 12) {
      am = false;
   } else (hours == 0) {
      hours = 12;
   }

   var minutes = myDate.getMinutes();
   alert("It is " + hours + " " + (am ? "a.m." : "p.m.") + " and " + minutes + " minutes".);

Ответ 9

Вы можете посмотреть this. Один из примеров говорит:

var d = new Date(dateString);

Как только у вас есть объект Date, вы можете довольно легко играть с ним. Вы можете либо вызвать toLocaleDateString, toLocaleTimeString, либо проверить, будет ли getHours больше 12, а затем просто рассчитать время AM/PM.

Ответ 10

date = date.replace(/[0-9]{1,2}(:[0-9]{2}){2}/, function (time) {
    var hms = time.split(':'),
        h = +hms[0],
        suffix = (h < 12) ? 'am' : 'pm';
    hms[0] = h % 12 || 12;        
    return hms.join(':') + suffix
});

edit: Я забыл иметь дело с 12 часами утра/вечера. Фиксированный.

Ответ 11

1) Команды "Squared" для создания 24 часов стали 12-часовыми:

var hours24 = new Date().getHours(); // retrieve current hours (in 24 mode)
var dayMode = hours24 < 12 ? "am" : "pm"; // if it less than 12 then "am"
var hours12 = hours24 <= 12 ? (hours24 == 0 ? 12 : hours24) : hours24 - 12;
// "0" in 24-mode now becames "12 am" in 12-mode – thanks to user @Cristian
document.write(hours12 + " " + dayMode); // printing out the result of code

2) В одной строке (тот же результат с немного отличающимся алгоритмом):

var str12 = (h24 = new Date().getHours()) && (h24 - ((h24 == 0)? -12 : (h24 <= 12)? 0 : 12)) + (h24 < 12 ? " am" : " pm");

Обе опции возвращают строку, например "5 pm" или "10 am" и т.д.

Ответ 12

 function GetTime(date) {
        var currentTime = (new Date(date))
        var hours = currentTime.getHours()
        //Note: before converting into 12 hour format
        var suffix = '';
        if (hours > 11) {
            suffix += "PM";
        } else {
            suffix += "AM";
        }
        var minutes = currentTime.getMinutes()
        if (minutes < 10) {
            minutes = "0" + minutes
        }
        if (hours > 12) {
            hours -= 12;
        } else if (hours === 0) {
            hours = 12;
        }
        var time = hours + ":" + minutes + " " + suffix;
        return time;
    }

Ответ 13

Пожалуйста, используйте приведенный ниже код

var s = "15 Feb 2015 11.30 a.m";
        var times = s.match("((([0-9])|([0-2][0-9])).([0-9][0-9])[\t ]?((a.m|p.m)|(A.M|P.M)))");            
        var time = "";

        if(times != null){                          
            var hour = times[2];
            if((times[6] == "p.m" || times[6] == "P.M")){
                if(hour < 12){
                    hour = parseInt(hour) + parseInt(12);
                }else if(hour == 12){
                    hour = "00";
                }
            }
            time = [hour, times[5], "00"].join(":");

        }

Спасибо

Ответ 14

var dt = new Date();
    var h =  dt.getHours(), m = dt.getMinutes();
    var thistime = (h > 12) ? (h-12 + ':' + m +' PM') : (h + ':' + m +' AM');
console.log(thistime);

Вот Демо

Ответ 15

Это сработало для меня!

function main() {
  var time = readLine();
  var formattedTime = time.replace('AM', ' AM').replace('PM', ' PM');
  var separators = [':', ' M'];
  var hms = formattedTime.split(new RegExp('[' + separators.join('') + ']'));
  if (parseInt(hms[0]) < 12 && hms[3] == 'P')
      hms[0] = parseInt(hms[0]) + 12;
  else if (parseInt(hms[0]) == 12 && hms[3] == 'A')
      hms[0] = '00';
  console.log(hms[0] + ':' + hms[1] + ':' + hms[2]);

}

Ответ 16

Я относительный новичок, но вот, что я придумал для одного из моих собственных проектов, и, похоже, он работает. Там могут быть более простые способы сделать это.

function getTime() {
    var nowTimeDate = new Date();
    var nowHour = nowTimeDate.getHours();
    var nowMinutes = nowTimeDate.getMinutes();
    var suffix = nowHour >= 12 ? "pm" : "am";
    nowHour = (suffix == "pm" & (nowHour > 12 & nowHour < 24)) ? (nowHour - 12) : nowHour;
    nowHour = nowHour == 0 ? 12 : nowHour;
    nowMinutes = nowMinutes < 10 ? "0" + nowMinutes : nowMinutes;
    var currentTime = nowHour + ":" + nowMinutes + suffix;
    document.getElementById("currentTime").innerHTML = currentTime;
}

Ответ 17

это ваш html-код, в котором вы вызываете функцию для конвертирования 24-часового формата времени в 12 часов с am/pm

<pre id="tests" onClick="tConvert('18:00:00')">
  test on click 18:00:00
</pre>
<span id="rzlt"></span>

Ответ 18

Эта функция преобразует в обоих направлениях: от 12 до 24 часов или от 24 до 12 часов

function toggle24hr(time, onoff){
    if(onoff==undefined) onoff = isNaN(time.replace(':',''))//auto-detect format
    var pm = time.toString().toLowerCase().indexOf('pm')>-1 //check if 'pm' exists in the time string
    time = time.toString().toLowerCase().replace(/[ap]m/,'').split(':') //convert time to an array of numbers
    time[0] = Number(time[0])
    if(onoff){//convert to 24 hour:
        if((pm && time[0]!=12)) time[0] += 12
        else if(!pm && time[0]==12) time[0] = '00'  //handle midnight
        if(String(time[0]).length==1) time[0] = '0'+time[0] //add leading zeros if needed
    }else{ //convert to 12 hour:
        pm = time[0]>=12
        if(!time[0]) time[0]=12 //handle midnight
        else if(pm && time[0]!=12) time[0] -= 12
    }
    return onoff ? time.join(':') : time.join(':')+(pm ? 'pm' : 'am')
}

Вот несколько примеров:

//convert to 24 hour:
toggle24hr('12:00am')   //returns 00:00
toggle24hr('2:00pm')    //returns 14:00
toggle24hr('8:00am')    //returns 08:00
toggle24hr('12:00pm')   //returns 12:00

//convert to 12 hour:
toggle24hr('14:00')    //returns 2:00pm
toggle24hr('08:00')    //returns 8:00am
toggle24hr('12:00')    //returns 12:00pm
toggle24hr('00:00')    //returns 12:00am

//you can also force a specific format like this:
toggle24hr('14:00',1)    //returns 14:00
toggle24hr('14:00',0)    //returns 2:00pm

Ответ 19

Здесь вы идете

var myDate = new Date("February 04, 2011 19:00:00");
var hr = myDate.getHours(); 
var convHrs = "";
var ampmSwitch = "";
ampmSwitch = (hr > 12)? "PM":"AM"; 
convHrs = (hr >12)? hr-12:hr;
// Build back the Date / time using getMonth/ getFullYear and getDate and other functions on the myDate object. Enclose it inside a func and there you got the working 12 hrs converter ;)

И вот конвертер func для yas;) Счастливое кодирование!!

function convertTo12Hrs(yourDateTime){
    var myDate = new Date(yourDateTime);
    var dtObject = new Object();
    var monthsCollection = {0:"January", 1:"February",2:"March",3:"April",4:"May",5:"June",6:"July",7:"August",8:"September",9:"October",10:"November",11:"December"};
    dtObject.year = myDate.getFullYear();
    dtObject.month = monthsCollection[myDate.getMonth()];
    dtObject.day = (myDate.getDate()<10)?"0"+myDate.getDate():myDate.getDate();
    dtObject.minutes = (myDate.getMinutes() < 10)? "0"+myDate.getMinutes():myDate.getMinutes();
    dtObject.seconds = (myDate.getSeconds() < 10)? "0"+myDate.getSeconds():myDate.getSeconds();
    // Check if hours are greater than 12? Its PM
    dtObject.ampmSwitch = (myDate.getHours() > 12)? "PM":"AM";
    // Convert the hours
    dtObject.hour = (myDate.getHours() > 12)?myDate.getHours()-12:myDate.getHours();
    // Add the 0 as prefix if its less than 10
    dtObject.hour = (dtObject.hour < 10)? "0"+dtObject.hour:dtObject.hour;

    // Format back the string as it was or return the dtObject object or however you like. I am returning the object here
    return dtObject;
}

вызывать его как convertTo12Hrs ( "04 февраля 2011 19:00:00" ); он вернет вам объект, который, в свою очередь, вы можете использовать для форматирования вашей строки datetime, как вам кажется...

Ответ 20

В любом случае вы все равно будете делать много манипуляции с строкой, так почему бы просто не манипулировать самой строкой даты?

Браузеры форматируют строку даты по-разному.

Netscape: Пт 11 мая 2012 20:15:49 GMT-0600 (Время горного дня)

IE: Fri 11 мая 20:17:33 MDT 2012

поэтому вам нужно будет это проверить.

var D = new Date().toString().split(' ')[(document.all)?3:4];

Это установит D равным 24-часовой строке HH: MM: SS. Разделите это на двоеточие, а первый элемент - часы.

var H = new Date().toString().split(' ')[(document.all)?3:4].split(':')[0];

Вы можете конвертировать 24-часовые часы в 12-часовые часы, но это не фактически упоминалось здесь. Наверное, потому что это довольно CRAZY что вы на самом деле делаете математически, когда вы конвертируете часы от часов. Фактически, то, что вы делаете, добавляет 23, mod'ing, что на 12 и добавив 1

twelveHour = ((twentyfourHour+23)%12)+1;

Итак, например, вы можете хватать все время со строки даты, мода часы и отображать все это с новыми часами.

var T = new Date().toString().split(' ')[(document.all)?3:4].split(':');
T[0] = (((T[0])+23)%12)+1;
alert(T.join(':'));

С помощью некоторого умного регулярного выражения вы, вероятно, можете вытащить часы с HH: MM: SS часть строки даты и поместить все их в одну строку. Это было бы смешная линия, потому что обратная связь $1 не может быть использована в вычислений без помещения функции в замену.

Вот как это будет выглядеть:

var T = new Date().toString().split(' ')[(document.all)?3:4].replace(/(^\d\d)/,function(){return ((parseInt(RegExp.$1)+23)%12)+1} );

Что, как я уже сказал, смешно. Если вы используете библиотеку, которая МОЖЕТ выполнять вычислений на обратных ссылках, линия становится:

var T = new Date().toString().split(' ')[(document.all)?3:4].replace(/(^\d\d)/, (($1+23)%12)+1);

И на самом деле это не вопрос, как полезный код, если вы его хорошо документируете. В этой строке говорится:

Создайте строку Date, разделите ее на пробелы, получите часть браузера-apropos, и замените первый двузначный номер на это число.

Точка сюжета - способ конвертировать 24-часовые часы в 12-часовые часы - неочевидный математический расчет:

Вы добавляете 23, mod к 12, затем добавляете еще один.

Ответ 21

Вот небольшая функция, которая сработала для меня.

function getDisplayDatetime() {
    var d = new Date(); var hh = d.getHours(); var mm = d.getMinutes(); var dd = "AM"; var h = hh;

    if (mm.toString().length == 1) {
        mm = "0" + mm;
    }

    if (h >= 12) {
        h = hh - 12;
        dd = "PM";
    }

    if (h == 0) {
        h = 12;
    }
    var Datetime = "Datetime: " + d.getFullYear() + "/" + (d.getMonth() + 1) + "/" + d.getUTCDate() + " " + h + ":" + mm;
    return Datetime + " " + dd;
}

Ответ 22

Я заметил, что уже есть ответ, но я хотел поделиться своим собственным решением, используя чистый JavaScript:

function curTime(pm) {
  var dt = new Date();
  var hr = dt.getHours(), min = dt.getMinutes(), sec = dt.getSeconds();
  var time = (pm ? ((hr+11)%12+1) : (hr<10?'0':'')+hr)+":"+(min<10?'0':'')+min+":"+(sec<10?'0':'')+sec+(pm ? (hr>12 ? " PM" : " AM") : ""); 
  return time;
}

Вы можете увидеть его в действии https://jsfiddle.net/j2xk312m/3/ с помощью следующего кода:

(function() {

  function curTime(pm) {
    var dt = new Date();
    var hr = dt.getHours(), min = dt.getMinutes(), sec = dt.getSeconds();
    var time = (pm ? ((hr+11)%12+1) : (hr<10?'0':'')+hr)+":"+(min<10?'0':'')+min+":"+(sec<10?'0':'')+sec+(pm ? (hr>12 ? " PM" : " AM") : ""); 
    return time;
  }

  alert("12-hour Format:    "+curTime(true)+"\n24-hour Format:    "+curTime(false));

})();

Ответ 23

Вы можете попробовать эту более общую функцию:

function to12HourFormat(date = (new Date)) {
  return {
    hours: ((date.getHours() + 11) % 12 + 1),
    minutes: date.getMinutes(),
    meridian: (date.getHours() >= 12) ? 'PM' : 'AM',
  };
}

Возвращает гибкий формат объекта.

https://jsbin.com/vexejanovo/edit

Ответ 24

Таким образом, вы получите больше контроля над выводом, т.е. если вы хотите, чтобы формат времени был '4:30 pm' вместо '04: 30 PM ' - вы можете конвертировать в любой формат, который вы решите, - и измените его позже. Вместо того, чтобы ограничиваться каким-то старым методом, который не допускает никакой гибкости.

Вам нужно только преобразовать первые 2 цифры, так как минуты и секунды одинаковы для 24-часового или 12-часового времени.

var my_time_conversion_arr = {'01':"01", '02':"02", '03':"03", '04':"04", '05':"05", '06':"06", '07':"07", '08':"08", '09':"09", '10':"10", '11':"11", '12': "12", '13': "1", '14': "2", '15': "3", '16': "4", '17': "5", '18': "6", '19': "7", '20': "8", '21': "9", '22': "10", '23': "11", '00':"12"};

                var AM_or_PM = "";
                var twenty_four_hour_time = "16:30";
                var twenty_four_hour_time_arr = twenty_four_hour_time.split(":");
                var twenty_four_hour_time_first_two_digits = twenty_four_hour_time_arr[0];

                var first_two_twelve_hour_digits_converted = my_time_conversion_arr[twenty_four_hour_time_first_two_digits];

                var time_strng_to_nmbr = parseInt(twenty_four_hour_time_first_two_digits);
                if(time_strng_to_nmbr >12){
                    //alert("GREATER THAN 12");
                    AM_or_PM = "pm";
                }else{
                    AM_or_PM = "am";
                }

                var twelve_hour_time_conversion = first_two_twelve_hour_digits_converted+":"+twenty_four_hour_time_arr[1]+" "+AM_or_PM;