简体   繁体   English

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

[英]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 In12: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 PMTime 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.

相关问题 Javascript 12 小时到 24 小时格式转换器 - Javascript 12 Hour to 24 Format convertor 来自 12 小时格式日期和时间字符串的 JavaScript 新日期 - JavaScript New Date from a 12 hour format date and time string 如何使用javascript将时间从24小时格式转换为12小时格式? - How to convert time from 24 hour format to 12 hour format using javascript? Javascript -- 检测用户的区域设置是否设置为使用 12 小时或 24 小时时间格式 - Javascript -- Detect if user's locale are set to use 12-hour or 24-hour time format JavaScript 确定浏览器是否使用 12 小时或 24 小时格式显示时间输入 - JavaScript to determine if browser is displaying the time input using a 12-hour or 24-hour format 如何从12小时格式创建JavaScript日期 - How to create a javascript date from 12 hour format javascript时间,点击按钮24小时至12小时 - javascript time 24 hour to 12 hour with a click button 使用 Javascript 将 24 小时制 JSON 数据转换为 12 小时制 - Converting JSON data 24 hour time to 12 hour with Javascript 如何在日期 object 中使用 24 小时格式? - how to use 24 hour format in date object? 日期范围选择器,24小时格式 - Date Range Picker in 24 hour format
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM