使用JavaScript将24小时制转换为12小时制的AM / PM

将以下JSON返回值从24小时格式转换为12小时格式(带AM&PM)的最佳方法是什么? date应该保持不变 – 时间是唯一需要格式化的东西。

February 04, 2011 19:00:00 

PS使用jQuery,如果这使得它更容易! 也喜欢一个简单的函数/代码,而不是使用Date.js。

更新2:没有秒选项

更新:中午后更正,testing: http : //jsfiddle.net/aorcsik/xbtjE/

我创build了这个function来做到这一点:

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

这是你如何可以改变小时,如果没有声明:

 hours = ((hours + 11) % 12 + 1); 
  //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); 

这是一个相当简洁的方法来使用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?  “上午下午”;
     var formattedTime = hours +“:”+ minutes +“”+ ampm;
    返回formattedTime;
 }

然后,所有你需要做的就是将你的string值转换为一个date,并使用新的方法:

 var stringValue =“2011年2月4日19:00:00;
 var dateValue = new Date(stringValue);
 var formattedTime = dateValue.getFormattedTime();

或者在一行中:

 var formattedTime = new Date(“February 04,2011 19:00:00”)。getFormattedTime();
 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> 

保持简单和干净

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

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

你可以看看这个 。 其中一个例子说:

 var d = new Date(dateString); 

一旦你有date对象,你可以很容易地玩它。 您可以调用toLocaleDateString,toLocaleTimeString或者可以testinggetHours是否大于12,然后计算AM / PM时间。

jQuery根本没有任何Date实用工具。 如果您不使用任何其他库,通常的方法是创build一个JavaScript Date对象,然后从中提取数据并自己格式化。

为了创buildDate对象,您可以确保JSON中的datestring是Date所能理解的forms,即IETF标准(基本上是RFC 822第5节 )。 所以如果你有机会改变你的JSON,这将是最简单的。 (编辑:你的格式可能实际上是这样的。)

如果你不能改变你的JSON,那么你需要自己parsing这个string,并得到天,嘴,年,小时,分钟和秒作为整数,并创buildDate对象。

一旦你有你的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 ? "am" : "pm") + " 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)单行(相同的结果,略有不同的algorythm):

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

两个选项都返回string,如"5 pm""10 am"

 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点。 固定。

请尝试下面的代码

 var s = "15 Feb 2015 11.30 am"; var times = s.match("((([0-9])|([0-2][0-9])).([0-9][0-9])[\t ]?((am|pm)|(AM|PM)))"); var time = ""; if(times != null){ var hour = times[2]; if((times[6] == "pm" || times[6] == "PM")){ if(hour < 12){ hour = parseInt(hour) + parseInt(12); }else if(hour == 12){ hour = "00"; } } time = [hour, times[5], "00"].join(":"); } 

谢谢

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

这是演示

我是一个相对的新手,但这是我为我自己的项目之一提出的,似乎工作。 可能有更简单的方法来做到这一点。

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

干得好

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

这里是雅思的转换器function;)快乐的编码!

 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(“2011年2月4日19:00:00”); 它会返回你的对象,这反过来,你可以用它来格式化你的date时间string,你喜欢…

你最终会做很多的string操作,所以为什么不只是操纵datestring呢?

浏览器的datestring格式不同。

Netscape :::周五2012年5月11日20:15:49 GMT-0600(山区夏令时间)

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

所以你必须检查。

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

这将设置D等于24小时HH:MM:SSstring。 拆分冒号,第一个元素将是小时。

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

可以将24小时制转换为12小时制,但实际上这里没有提到。 可能是因为它是相当疯狂的,当你从时钟转换小时,你实际上在做math运算。 事实上,你正在做的是增加23,模式,由12,并加1

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

因此,例如,您可以从datestring中获取整个时间,修改小时数,并显示新时间的所有时间。

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

有了一些聪明的正则expression式,你可以把时间从datestring的HH:MM:SS部分拉下来,然后在同一行中对它们全部进行修改。 这将是一个荒谬的线条,因为反向引用$ 1不能在计算中使用,而不会在replace中放入函数。

以下是看起来如何:

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

而且,如果你把它logging好的话,那么这个代码就不会成为可用的代码。 该行说:

制作一个datestring,在空格上分解它,得到浏览器apropos部分,并用mod'edreplace第一个两位数的数字。

故事的要点是,将24小时制转换为12小时制的方式是一个不明显的math计算:

你添加23,mod 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; } 

这是一个很好的小function,为我工作。

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

这对我有用!

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

我注意到已经有一个答案,但我想分享我自己的解决scheme,使用纯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:

 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

这是你的HTML代码,你正在调用函数来转换24小时的时间格式为上午/下午12小时

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