簡體   English   中英

新的Date()12/24小時格式的JavaScript?

[英]new Date() 12/24 hour format JavaScript?

我有一個簡單的驗證,可以防止“輸入/輸出時間”輸入錯誤的值。 因此,如果用戶選擇:

12:30 PM = Time In12:15 PM = Time Out

他們將在屏幕上顯示消息'Time Out can not be less or equal than Time In'

我的驗證工作正常,但有一種情況。 例如,用戶選擇:

Time In: 12:30 PMTime 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM