2011-04-19 81 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; 
}