使用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();
你可以看看这个 。 其中一个例子说:
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', }; }
返回一个灵活的对象格式。
这是你的HTML代码,你正在调用函数来转换24小时的时间格式为上午/下午12小时
<pre id="tests" onClick="tConvert('18:00:00')"> test on click 18:00:00 </pre> <span id="rzlt"></span>