Получение ожидаемого времени выхода из системы на основе времени входа в систему

#javascript #html

#javascript #HTML

Вопрос:

Мы используем стороннее веб-приложение, которое показывает только количество минут раньше (относительно окончания льготного периода), а не ваше время входа в систему. Я работаю над кодом, который показывает ваше время входа в систему на основе количества минут раньше, пока мы разрабатываем предлагаемые изменения для поставщика стороннего веб-приложения.

Мне удалось получить время входа в систему, но я не смог получить ожидаемое время выхода из системы, то есть через 9 часов (в идеале!).).

Например, если ожидается, что я войду в систему до 9:00 утра, а я прихожу на 30 минут раньше, то мое время входа в систему составляет 8:30 утра, а ожидаемое время выхода из системы — 5:30 вечера. На странице отображаются одинаковые выходные данные для времени входа и выхода из системы. Должна быть проблема с добавлением минут к дате.

 function getLoginTime(endofGP, minutes) {
  var d = new Date();
  const msperminute = 60000;
  minutes = document.getElementById("minutesearly").value;
  var endOption = document.getElementById("end").value;
  if (endOption == "1") {
    endofGP = new Date(d.getFullYear(), d.getMonth(), d.getDate(), 8, 0, 0, 0);
  } else if (endOption == "2") {
    endofGP = new Date(d.getFullYear(), d.getMonth(), d.getDate(), 8, 30, 0, 0);
  } else if (endOption == "3") {
    endofGP = new Date(d.getFullYear(), d.getMonth(), d.getDate(), 9, 0, 0, 0);
  } else if (endOption == "4") {
    endofGP = new Date(d.getFullYear(), d.getMonth(), d.getDate(), 9, 30, 0, 0);
  } else if (endOption == "5") {
    endofGP = new Date(d.getFullYear(), d.getMonth(), d.getDate(), 10, 0, 0, 0);
  }
  var login = new Date(endofGP - (minutes * msperminute)); //Get log in time
  var logout = new Date(login   (540 * msperminute)); //Get expected log out time
  document.getElementById("logintime").innerHTML = login;
  document.getElementById("logouttime").innerHTML = logout;
}

function clearMinutes() {
  document.getElementById("minutesearly").value = "";
} 
 <h2>GET LOG IN TIME</h2>

<form autocomplete="off">
  <label for="end">Select End of Grace Period</label><br>
  <select id="end" name="end" onchange = "clearMinutes()">
    <option value="">Please select</option>    
    <option value="1">8:00 AM</option>
    <option value="2">8:30 AM</option>
    <option value="3">9:00 AM</option>
    <option value="4">9:30 AM</option>
    <option value="5">10:00 AM</option>
  </select><br>
  <label for="minutesearly">Minutes Early</label><br>
  <input type="number" id="minutesearly" oninput = "getLoginTime()"><br>
</form>

<p id="logintime">LOG IN TIME</p>
<p id="logouttime">LOG OUT TIME</p> 

Ответ №1:

Я немного упростил функцию, чтобы избежать всех операторов if, поскольку нам действительно нужно только захватить текст параметров, чтобы получить различные компоненты, необходимые для создания объекта date.

Затем мы используем setMinutes , чтобы добавить 9 часов к времени входа в систему

 function loginTime(){
  let d = new Date();
  let minutes = document.getElementById('minutesearly').value || 0;
  const msperminute = 60000;
  let end = document.getElementById('end');
  let endValue = end.options[end.selectedIndex].text
  let hour = endValue.split(':')[0];
  let minute = endValue.split(':')[1].replace(/AMb/g,'').trim() || 0;
  let endGP = new Date(d.getFullYear(), d.getMonth(), d.getDate(), hour, minute, 0, 0);
 
  let login = new Date(endGP - (minutes * msperminute)); //Get log in time
  let logout = new Date ( login );
  logout.setMinutes(logout.getMinutes()   540 );

  document.getElementById("logintime").innerHTML = login;
  document.getElementById("logouttime").innerHTML = logout;
  
} 
 <h2>GET LOG IN TIME</h2>

<form autocomplete="off">
  <label for="end">Select End of Grace Period</label><br>
  <select id="end" name="end" onchange = "loginTime()">
    <option value="">Please select</option>    
    <option value="1">8:00 AM</option>
    <option value="2">8:30 AM</option>
    <option value="3">9:00 AM</option>
    <option value="4">9:30 AM</option>
    <option value="5">10:00 AM</option>
  </select><br>
  <label for="minutesearly">Minutes Early</label><br>
  <input type="number" id="minutesearly" oninput = "loginTime()"><br>
</form>

<p id="logintime">LOG IN TIME</p>
<p id="logouttime">LOG OUT TIME</p>