繁体   English   中英

Javascript 12 小时到 24 小时格式转换器

[英]Javascript 12 Hour to 24 Format convertor

有什么办法可以在 JS 中将 12 小时时间格式转换为 24 小时格式? 我对 JavaScript 一点都不擅长,所以我仍然很惊讶我能做到这一步。

我想要做的是将时间从 12 小时转换为 24 小时,以便我可以进行比较,例如如果 endDate 大于 startDate,但我无法理解的是如何将我收到的 12 小时格式转换为有效的 24 小时格式.

$('#de_endTime').bind('blur', function()
{
    sDate = $('#de_startDate').val();
    startTime = $('#de_startTime').val();
    endTime = $('#de_endTime').val();

    if (startTime == ""){
        alert("First input the start time");
        $('#de_startTime').focus();
    }

    dSplit = sDate.split("-");
    dYear = dSplit[0];
    dMonth = dSplit[1] - 1;
    dDay = dSplit[2];

    stSplit = startTime.split(":");
    stHour = stSplit[0];
    stMin = stSplit[1].split(" ")[0];
    stAmPm = stSplit[1].split(" ")[1];

    etSplit = endTime.split(":");
    etHour = etSplit[0];
    etMin = etSplit[1].split(" ")[0];
    etAmPm = etSplit[1].split(" ")[1];

    fullStartDate = getDateObject(dYear, dMonth, dDay, stHour, stMin);
    fullEndDate = getDateObject(dYear, dMonth, dDay, etHour, etMin);

    if (fullStartDate - fullEndDate > 0){
        alert("Start Time cannot be higher than End Time!");
    }
});

这是 getDateObject() 函数

function getDateObject(year, month, day, hours, minutes) {
  var newDate = new Date();
  newDate.setFullYear(year);
  newDate.setMonth(month);
  newDate.setDate(day);

  newDate.setHours(hours);
  newDate.setMinutes(minutes);
  newDate.setSeconds(0);
  newDate.setMilliseconds(0);
  return newDate;
}

我不确定我是否提供了足够的细节,但如果没有,请告诉我:) 谢谢 :)

[ 编辑 ]新代码,到目前为止似乎输出一切正常:)

$('#de_endTime').bind('blur', function()
{
    sDate = $('#de_startDate').val();
    startTime = $('#de_startTime').val();
    endTime = $('#de_endTime').val();

    if (startTime == ""){
        alert("First input the start time");
        $('#de_startTime').focus();
    }

    dSplit = sDate.split("-");
    dYear = dSplit[0];
    dMonth = dSplit[1];
    dDay = dSplit[2];

    fullIsoDate = dMonth + "/" + dDay + "/" + dYear;
    //alert(fullIsoDate);

    var fullStartDate = new Date(startTime + ' ' + fullIsoDate);
    var fullEndDate = new Date(endTime + ' ' + fullIsoDate);

    alert(fullStartDate);
    if (fullStartDate - fullEndDate > 0){
        alert("Start Time cannot be higher than End Time!");
    }
    alert(fullEndDate > fullStartDate)
});

日期对象可以直接比较,不关心 12/24 小时格式,所以只需将您的时间放在两个日期对象中并进行比较。

var dateOne = new Date('1:00 PM 1/1/1900');
var dateTwo = new Date('13:01 1/1/1900');

if(dateOne < dateTwo)
{
    alert('DateOne is before DateTwo');
} else {
    alert('DateOne is after DateTwo');
}

你会收到一个警告框,上面写着 DateOne 在 DateTwo 之前

我一直在到处寻找简单的东西来将时间从 24 小时制转换为 12 小时制,反之亦然。 从字面上看,那里的一切都只处理日期,或时间和日期。 因此,我制作了一个简单的时间转换器,并认为其他任何人都需要它(基于第一个示例的拆分方法)。

//usage timeConvert("12:01 PM","24")  results  12:01:00
//OR    timeConvert("12:01:00","12")  results  12:01 PM
function timeConvert(time,twelvOrTwen){ 
    var stSplit = time.split(":");
    var stHour = stSplit[0];
    var stMin = stSplit[1].split(" ")[0];
    var stAmPm = stSplit[1].split(" ")[1];
    var newhr = 0;
    var ampm = '';
    var newtime = '';
   // alert("hour:"+stHour+"\nmin:"+stMin+"\nampm:"+stAmPm); //see current values
    if (twelvOrTwen == "12") {
        if (stHour == 12){
        ampm = "PM";
        newhr = 12;
        }
        else if (stHour == 00){;
        ampm = "AM";
        newmin = stMin;
        newhr = 12;
        }
        else if (stHour > 12){
        newhr = stHour - 12;
        ampm = "PM";
        }
        else {
        newhr = stHour;
        ampm = "AM";
        }
        newtime = newhr+":"+stMin+" "+ampm;
    }
    else if (twelvOrTwen == "24"){
    if ((stAmPm == "pm") || (stAmPm == "PM")){ 
        if (stHour < 12) {
        newhr = (stHour*1)+(1*12); //goes to 13
        }
        else { //means is 12:30 PM
        newhr = 12;
        }
    }
    newtime = newhr+":"+stMin+":"+"00";
    }
    else {
    alert("No Time To Convert Or Didn't Specify 12 or 24");
    }
    return newtime;
}

显然,这个问题已经很老了,但我会粘贴我的解决方案来回答你的标题所说的问题。 然而,这必须意味着12 hour time format必须带有一个空格分隔一天的时间和时间,即( ampm )。

解决方案1:

function convertTimeTo24(time) {
    const realTime = time.split(" ");
    if (realTime[1].toLowerCase() === "am") {
        return realTime[0];
    } else {
        const timeToReturn = realTime[0].split(":");
        const increaseHours = Number(timeToReturn[0]) + 12;

        return `${increaseHours}:${timeToReturn[1]}`;
    }
} 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM