[英]new Date() 12/24 hour format JavaScript?
I have a simple validation that should prevent Time In/Out of entering incorrect values. 我有一个简单的验证,可以防止“输入/输出时间”输入错误的值。 So if user pick for example:
因此,如果用户选择:
12:30 PM = Time In
and 12:15 PM = Time Out
12:30 PM = Time In
和12:15 PM = Time Out
They will get the message on the screen 'Time Out can not be less or equal than Time In'
. 他们将在屏幕上显示消息
'Time Out can not be less or equal than Time In'
。
My validation works fine but in one case. 我的验证工作正常,但有一种情况。 For example user pick:
例如,用户选择:
Time In: 12:30 PM
and Time Out: 1:00 PM
Time In: 12:30 PM
和Time Out: 1:00 PM
They click save and alert message popup. 他们单击“保存并警告消息”弹出窗口。 I found that my code was producing something like this:
我发现我的代码正在生成如下内容:
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)
I used JavaScript to create new Date for Time In and Time out values. 我使用JavaScript为超时和超时值创建了新的日期。 Looks like my code is setting 00 for 12 PM hours in
new Date()
. 看起来我的代码在
new Date()
中将00设置为12 PM小时。 So my question is how to prevent that or is there any other way in JavaScript to fix this problem. 所以我的问题是如何防止这种情况,或者JavaScript是否有其他方法可以解决此问题。 Here is my code where I'm taking two entered values in converting to new Date() :
这是我的代码,在将两个输入的值转换为新的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-hour clock to 24-hour clock, hour + period conversion. 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);
Just change your condition from: 只需更改您的条件即可:
defaultAMPMOut/In == "PM"
to 至
defaultAMPMOut/In == "PM" && defaultHourOut/In != 11 //or 12 depending on if it starts at 0 or 1
What's happening is if it's 12, then it's still adding 12 when it shouldn't be, rolling it over to 0. 发生的是,如果它是12,那么当它不应该是12时,它仍会加12,将其翻转为0。
EDIT: 编辑:
If it's 12AM, you also have to subtract 12 hours so it's 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)
}
Why not do something simpler and convert this into a re-usable function, something like: 为什么不做一些简单的事情,然后将其转换为可重用的函数,例如:
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);
Try this. 尝试这个。
// 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.