使用 Javascript 将24小时时间转换为12小时时间 w/AM & PM

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

February 04, 2011 19:00:00

另外,如果使用 jQuery 会更容易,那么我们也希望使用简单的函数/代码,而不要使用 Date.js。

245753 次浏览

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

var d = new Date(dateString);

一旦有了 Date 对象,就可以相当容易地使用它。您可以调用 toLocaleDateString,toLocaleTimeString,也可以测试 getHours 是否大于12,然后计算 AM/PM 时间。

JQuery 根本没有任何 Date 实用程序。如果不使用任何其他库,通常的方法是创建一个 JavaScriptDate对象,然后从中提取数据并自己对其进行格式化。

为了创建 Date对象,您可以确保 JSON 中的日期字符串采用 Date能够理解的形式,即 IETF 标准(基本上是 RFC 822第5节)。因此,如果您有机会更改您的 JSON,那将是最容易的。(编辑: 您的格式可能实际上是这样工作的。)

如果您不能更改 JSON,那么您需要自己解析字符串并获取整数形式的 day、 mouth、 year、 hours、 minutes 和 second,然后用它创建 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".);

更新2: without second 选项

更新: 中午校正后的上午,测试: < a href = “ http://jsfiddle.net/orcsik/xbtjE/”rel = “ noReferrer”> 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"));

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 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 的转换函数;)编码愉快! !

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,201119: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;

无论如何你最终都会做很多字符串操作, 那么为什么不直接操作日期字符串本身呢?

浏览器以不同的方式格式化日期字符串。

网景: : : 星期五2012年5月11日20:15:49格林尼治标准时间0600(UTC-6)

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

所以你得检查一下。

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;

例如,你可以从日期字符串 mod 中获取整个时间 时间,并显示所有与新的时间。

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 字符串,在空格上将其分开,获得浏览器的部分, 然后把第一个两位数的数字换成那个被修改过的数字。

故事的重点是,如何将24小时的时间转换为12小时的时间 是一种不明显的数学计算:

你加23,修改12,然后再加一个。

这里有一个使用 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();
 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;
}

这就是你如何改变时间而不用 if 语句:

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

下面是一个对我很有用的小函数。

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


}

谢谢

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();
var n = d.toLocaleString();

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

这招对我管用!

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


}

对于那些只需要输出时间的读者,您可以将选项传递给 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 将被设置为:

早上八点

如果你也想要秒的话,在你的选项中添加“ second: ‘ numeric’”。所有选项请参阅 这个

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

我相对来说是个新手,但这是我为自己的一个项目想出来的方案,看起来很有效。也许有更简单的方法。

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到6:00:00为我工作

这个函数将向两个方向转换: 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

这样你就可以对输出有更多的控制-也就是说,如果你想要时间格式是 下午4:30而不是 下午4:30-你可以转换成任何你决定你想要的格式-以后也可以改变它。而不是被限制在一些不允许任何灵活性的旧方法中。

你只需要转换前两位数字,因为分钟数和秒数在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;