2016-09-14 2 views
0

У меня есть простая проверка, которая должна препятствовать вводу/выходу Time In/Out неправильных значений. Таким образом, если пользователь выбрать, например:новый Дата() 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) 

создать новую дату Time In и тайм-аут значения Я использовал JavaScript. Похоже, мой код устанавливает 00 для 12 часов в new Date(). Поэтому мой вопрос заключается в том, как предотвратить это или есть какой-либо другой способ в JavaScript, чтобы исправить эту проблему. Вот мой код, где я беру два введенные значения при переходе на новую дату():

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'"); 
} 
+0

Будет ли это работать должным образом с другим языком? – ppeterka

+0

@ppeterka Я не уверен. –

+3

Вы можете взглянуть на http://momentjs.com/. Это, вероятно, лучшая библиотека для управления датой/временем в javascript. Вы сэкономите много хлопот с ним. – Paulooze

ответ

1

Просто измените свое состояние от:

defaultAMPMOut/In == "PM"

в

defaultAMPMOut/In == "PM" && defaultHourOut/In != 11 //or 12 depending on if it starts at 0 or 1

Что происходит, если ему 12, то он все равно добавляет 12, когда этого не должно быть, перевернув его на 0.

EDIT:

Если это 12AM, вы должны вычесть 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) 
} 
+0

Я протестировал код выше и работает для меня. Я не уверен, что это предотвратит любую другую ошибку при конфликтах времени. Похоже, 24 часа никогда не ударят. Если я выберу 12AM, он отобразит 12 часов. –

+0

У вас должен быть чек, если он говорит AM и равен 12, сделать это 0 или 1 –

+0

Так внутри моего if (defaultAMPMOut/In == "PM" && defaultHourOut/In! = 12) Я должен проверить на 12 утра и вычесть в таком случае? –

-1

Попробуйте это.

// 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 
+0

Я пробовал это и не работал для меня. –

1

Почему бы не сделать что-то более простое и преобразовать это в многоразовым функции, что-то вроде:

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); 
+1

Это пример и предназначен для руководства, а не для кода для вас :) – zerohero

2

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);

Смежные вопросы