[英]new Date() 12/24 hour format JavaScript?
我有一個簡單的驗證,可以防止“輸入/輸出時間”輸入錯誤的值。 因此,如果用戶選擇:
12:30 PM = Time In
和12:15 PM = Time Out
他們將在屏幕上顯示消息'Time Out can not be less or equal than Time In'
。
我的驗證工作正常,但有一種情況。 例如,用戶選擇:
Time In: 12:30 PM
和Time Out: 1:00 PM
他們單擊“保存並警告消息”彈出窗口。 我發現我的代碼正在生成如下內容:
Time In: Thu Sep 15 2016 00:29:00 GMT-0500 (Central Standard Time)Time Out: Wed Sep 14 2016 13:29:00 GMT-0500 (Central Standard Time)
我使用JavaScript為超時和超時值創建了新的日期。 看起來我的代碼在new Date()
中將00設置為12 PM小時。 所以我的問題是如何防止這種情況,或者JavaScript是否有其他方法可以解決此問題。 這是我的代碼,在將兩個輸入的值轉換為新的Date()的地方:
var timeIn = document.getElementById('timeIn').value;
var timeOut = document.getElementById('timeOut').value;
var today = new Date(),
curYear = today.getFullYear(),
curDate = today.getDate(),
curMonth = today.getMonth(),
defaultTimeIn = timeIn.split(":"),
defaultTimeOut = timeOut.split(":"),
defaultHourIn = parseInt(defaultTimeIn[0], 10),
defaultHourOut = parseInt(defaultTimeOut[0], 10),
defaultMinAMPMIn = defaultTimeIn[1].split(" "),
defaultMinAMPMOut = defaultTimeOut[1].split(" "),
defaultMinIn = defaultMinAMPMIn[0],
defaultMinOut = defaultMinAMPMOut[0],
defaultAMPMIn = defaultMinAMPMIn[1],
defaultAMPMOut = defaultMinAMPMOut[1];
if (defaultAMPMIn == "PM") {
defaultHourIn += 12; //hours are in 24-hour format (0-23)
}
if (defaultAMPMOut == "PM") {
defaultHourOut += 12; //hours are in 24-hour format (0-23)
}
var compTimeIn = new Date(curYear, curMonth, curDate, defaultHourIn, defaultMinIn);
var compTimeOut = new Date(curYear, curMonth, curDate, defaultHourOut, defaultMinOut);
if (compTimeIn >= compTimeOut) {
alert("'Time Out' can't be less or equal to 'Time In'");
}
12小時制到24小時制,小時+周期轉換。
function to24Hour(hour, period) { if (period === 'AM' && hour === 12) { hour -= 12; } else if (period === 'PM' && hour < 12) { hour += 12; } return hour; } const hours12 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]; const hours24 = []; for (let hour of hours12) { hours24.push(to24Hour(hour, 'AM')); hours24.push(to24Hour(hour, 'PM')); } console.log(hours24);
只需更改您的條件即可:
defaultAMPMOut/In == "PM"
至
defaultAMPMOut/In == "PM" && defaultHourOut/In != 11 //or 12 depending on if it starts at 0 or 1
發生的是,如果它是12,那么當它不應該是12時,它仍會加12,將其翻轉為0。
編輯:
如果是凌晨12點,那么您還必須減去12小時,所以它是0
if (defaultAMPMIn == "PM" && defaultHourIn != 12) {
defaultHourIn += 12; //hours are in 24-hour format (0-23)
}
if (defaultAMPMOut == "PM" && defaultHourOut != 12) {
defaultHourOut += 12; //hours are in 24-hour format (0-23)
}
if (defaultAMPMOut == "AM" && defaultHourOut == 12) {
defaultHourOut -= 12; //hours are in 24-hour format (0-23)
}
if (defaultAMPMIn == "AM" && defaultHourIn == 12) {
defaultHourIn -= 12; //hours are in 24-hour format (0-23)
}
為什么不做一些簡單的事情,然后將其轉換為可重用的函數,例如:
var time = document.getElementById('timeIn').value;
var hours = Number(time.match(/^(\d+)/)[1]);
var minutes = Number(time.match(/:(\d+)/)[1]);
var AMPM = time.match(/\s(.*)$/)[1];
if(AMPM == "PM" && hours<12) hours = hours+12;
if(AMPM == "AM" && hours==12) hours = hours-12;
var sHours = hours.toString();
var sMinutes = minutes.toString();
if(hours<10) sHours = "0" + sHours;
if(minutes<10) sMinutes = "0" + sMinutes;
alert(sHours + ":" + sMinutes);
嘗試這個。
// Your Code
if (defaultAMPMIn == "PM" && defaultHourIn >12) {
defaultHourIn += 12;//hours are in 24-hour format (0-23)
}
if (defaultAMPMOut == "PM" && defaultHourOut >12) {
defaultHourOut += 12;//hours are in 24-hour format (0-23)
}
//Your Code
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.