簡體   English   中英

使用 Javascript 將 24 小時制轉換為 12 小時制

[英]Converting 24 hour time to 12 hour time w/ AM & PM using Javascript

將以下 JSON 返回值從 24 小時格式轉換為 12 小時格式(帶 AM 和 PM)的最佳方法是什么? 日期應該保持不變——時間是唯一需要格式化的東西。

February 04, 2011 19:00:00

PS 使用 jQuery 如果這使它更容易! 也更喜歡簡單的函數/代碼而不是使用 Date.js。

這是您可以在沒有 if 語句的情況下更改時間的方法:

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

更新 2:沒有秒選項

更新:中午更正后上午,測試: 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"));

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

對於只想要輸出中的時間的任何人,您可以將選項傳遞給 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);

timeString 將設置為:

上午 8:00

如果您也需要秒,請將“second: 'numeric'”添加到您的選項中。 對於所有選項,請參閱

這是使用 Prototype 的一種相當簡潔的方法:

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

保持簡單和干凈

var d = new Date();
var n = d.toLocaleString();

https://jsfiddle.net/rinu6200/3dkdxaad/#base

 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>

jQuery 根本沒有任何 Date 實用程序。 如果您不使用任何其他庫,通常的方法是創建一個 JavaScript Date對象,然后從中提取數據並自行格式化。

要創建Date對象,您可以確保 JSON 中的日期字符串采用Date理解的形式,這是 IETF 標准(基本上是RFC 822 第 5 節)。 因此,如果您有機會更改 JSON,那將是最簡單的。 (編輯:您的格式實際上可能按原樣工作。)

如果你不能改變你的 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".);

1) 使 24 小時制的“平方”說明變成了 12 小時制:

var hours24 = new Date().getHours(); // retrieve current hours (in 24 mode)
var dayMode = hours24 < 12 ? "am" : "pm"; // if it's 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"等。

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

這是演示

你可以看看這個 其中一個例子說:

var d = new Date(dateString);

一旦你有了 Date 對象,你就可以很容易地使用它。 您可以調用 toLocaleDateString、toLocaleTimeString,也可以測試 getHours 是否大於 12,然后計算 AM/PM 時間。

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

編輯:我忘了處理上午/下午 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;
    }

請嘗試使用以下代碼

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(":");

        }

謝謝

這對我有用!

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

}

我是一個相對的新手,但這是我為我自己的一個項目提出的想法,它似乎有效。 可能有更簡單的方法來做到這一點。

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

這是您的 html 代碼,您在其中調用函數將 24 小時時間格式轉換為上午/下午的 12 小時

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

現在在 js 代碼中按原樣編寫此 tConvert 函數

 function tConvert (time) { // Check correct time format and split into components time = time.toString ().match (/^([01]\\d|2[0-3])(:)([0-5]\\d)(:[0-5]\\d)?$/) || [time]; if (time.length > 1) { // If time format correct time = time.slice (1); // Remove full string match value time[5] = +time[0] < 12 ? 'AM' : 'PM'; // Set AM/PM time[0] = +time[0] % 12 || 12; // Adjust hours } //return time; // return adjusted time or original string var tel = document.getElementById ('rzlt'); tel.innerHTML= time.join (''); }

將 18:00:00 轉換為 6:00:00PM 為我工作

此函數將雙向轉換: 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

無論如何,您最終都會進行大量的字符串操作,那么為什么不直接操作日期字符串呢?

瀏覽器以不同的方式格式化日期字符串。

Netscape ::: 2012 年 5 月 11 日星期五 20:15:49 GMT-0600(山地夏令時)

IE ::: 2012 年 5 月 11 日星期五 20:17:33 MDT

所以你必須檢查一下。

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 小時制,但這實際上並未在此處提及。 可能是因為當您從時鍾轉換小時數時,您實際上在數學上所做的事情相當瘋狂。 事實上,你正在做的是添加 23,將其修改為 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);

如果您記錄得很好,那么作為可用代碼實際上並不是不可能的。 那行說:

制作一個日期字符串,在空格上分解它,獲取瀏覽器相關部分,然后用修改后的數字替換前兩位數字。

故事的重點是,將 24 小時制轉換為 12 小時制的方法是一個不明顯的數學計算:

您添加 23,再乘以 12,然后再添加一個。

這是一個對我有用的不錯的小功能。

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

我注意到已經有一個答案,但我想分享我自己的解決方案,使用純 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));

})();

你可以試試這個更通用的函數:

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

通過這種方式,您可以更好地控制輸出 - 即 - 如果您希望時間格式為“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;

給你

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

這是 yas 的轉換器 func ;) 編碼愉快!!

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("February 04, 2011 19:00:00"); 它會返回給你對象,反過來你可以用它來格式化你喜歡的日期時間字符串......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM