新日期()12/24小时格式JavaScript?
我有一个简单的验证,应该防止时间输入/输出不正确的值。因此,如果用户挑选例如:新日期()12/24小时格式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为Time In Time和Time out值创建新日期。看起来我的代码在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'");
}
只要改变你的病情从:
defaultAMPMOut/In == "PM"
到
defaultAMPMOut/In == "PM" && defaultHourOut/In != 11 //or 12 depending on if it starts at 0 or 1
发生了什么是如果它是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)
}
我测试了上面的代码并为我工作。我不确定这是否会阻止与时间冲突的其他错误。看起来像24小时不会被击中。如果我选择12AM,它将显示12小时。 –
你应该有一个检查,如果它说AM和12,使它0或1 –
因此,在我的if(默认AMPMOut/In ==“PM”&& defaultHourOut/In!= 12)我应该检查上午12点,并减去在这种情况下? –
试试这个。
// 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
我试过这个,并没有为我工作。 –
为什么不这样做简单的东西,并转换成可重复使用的功能,这一点,是这样的:
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);
这是一个例子,是为了引导,而不是为你做的代码:) – zerohero
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);
将与不同的区域设置这项工作是否正常? – ppeterka
@ppeterka我不确定。 –
你可以看看http://momentjs.com/。这可能是一个最好的库,用于处理javascript中的日期/时间。你会为它节省很多麻烦。 – Paulooze