2011-04-19 84 views
2

有没有什么办法可以将12小时时间格式转换为24小时格式? 我对JavaScript并不擅长,所以仍然很惊讶,我甚至可以设法达到这个目标。Javascript 12小时至24格式转换器

我想要做的是将时间从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; 
} 

我不知道如果我提供足够的细节,但请让我知道如果didnt :) 谢谢:)

[编辑] 新的代码,这似乎是输出的一切罚款到目前为止:)

$('#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) 
}); 

回答

4

可以直接比较日期对象,并且不关心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

+0

我似乎有它的工作,感谢您的提示。 代码也较短,这是很好,但我想知道,因为时间不再分裂了我将如何做验证,以确保输入的时间是正确的?我已经对输入字段进行了检查以约束输入,我是否应该关注自己的进一步验证,或者应该足够吗? (更新的代码是在第一篇文章)。 – Zubair1 2011-04-19 19:45:28

+1

@ Zubair1因为您使用的是jQuery,所以您可能需要查看一些非常棒的jQuery插件,它们用于表单验证(我建议使用http://bassistance.de/jquery-plugins/jquery-plugin-validation/)或其他路线是使用日期/时间选择器,所以你知道用户提供了有效的输入。 – 2011-04-19 20:04:20

+0

谢谢你,但我不认为我想包括一个单独的图书馆只是为了这个验证,我见过的大多数只是矫枉过正。不过,我使用日期时间选择器插件:)应该是足够的,但? – Zubair1 2011-04-19 20:08:13

0

我一直在到处找只是一些简单的时间从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; 
}