Как обрабатывать динамические c дату в javascript - PullRequest
2 голосов
/ 26 мая 2020

Я застрял около двух проблем в JavaScript, но не нашел решения.

Моя первая проблема: мы на 25-05-2020, если пользователь вводит дату yersteday или предыдущую Дата. Я хочу отобразить сообщение об ошибке.

Мне нужно использовать метод now()? Я пробовал это ??

const date = new Date(date_start)

    if(date.getFullYear() < Date.now()) {
        document.getElementById('date_startError').innerHTML = " ** the date is obsolete ! ";
        return false;

}

Моя вторая проблема: как обрабатывать дату Futur? Например, я хочу ограничить дату Futur одним максимальным годом?

Пример: мы находимся на 2020-05-25, если пользователь вводит ввод на 2020-05-27 Я хотел бы отобразить сообщение об ошибке.

Редактировать

function validation()
{
    
    var date_start = document.getElementById('date_start').value;


    const date = new Date(date_start);
    const oneYearFromNow = now.setFullYear(now.getFullYear() + 1);

    if(date < oneYearFromNow) {
        document.getElementById('date_startError').innerHTML = " ** the date is obsolete ! ";
        return false;
 
    } 
    
}
<!DOCTYPE html>
<html lang="fr">
<head>
  <meta charset="utf-8">
  <title>Titre de la page</title>
  <link rel="stylesheet" href="style.css">
  <script src="script.js"></script>
</head>
<body>
<form action="#" onsubmit="return validation()" >
<br>
<label>Date start : </label>
<br>
<input type="date" name="date_start" id="date_start">
<br>
<span id="date_startError"></span>
<br>
<input type="submit" value="ok">
</form>
</body>
</html>

Спасибо за ваши объяснения.

Ответы [ 3 ]

2 голосов
/ 26 мая 2020

Date.now возвращает EPOCH: количество миллисекунд, прошедших с 1 января 1970 г., 00:00:00 UT C. Похоже, вы сравниваете это (целое число) с датой, и это может быть проблемой.

Если у вас уже есть экземпляр даты, вы можете вместо этого использовать new Date(), который возвращает текущее datetime и использовать встроенные операторы сравнения для дат:

date > new Date()

Вы также можете получить EPOCH даты с помощью .getTime(), а затем сравнить его с Date.now():

date.getTime() > Date.now()

Для годовой проверки вы можете сделать что-то вроде этого:

const now = new Date()
const oneYearFromNow = now.setFullYear(now.getFullYear() + 1);
date < oneYearFromNow
1 голос
/ 26 мая 2020

Для сравнения дат проще использовать библиотеку, например moment. js или date-fns.

Пример с date-fns может быть:

https://codesandbox.io/embed/modest-moon-b8mub?fontsize=14&hidenavigation=1&theme=dark

 const dateEntered = new Date("2019-05-26")
  const now = new Date();

  if (isBefore(dateEntered, now)) {
    return (
      <h1>Date cannot be in the past</h1>
    )
  }
  if (intervalToDuration({
    start: new Date("2019-05-26"),
    end: now
  }).years < 1) {
    return (

      <h1>Date cannot be over one year in the future</h1>
    )
  }

документы для isBefore: https://date-fns.org/v2.14.0/docs/isBefore

документы для intervalToDuration: https://date-fns.org/v2.14.0/docs/intervalToDuration

1 голос
/ 26 мая 2020

Вот функция для расчета разницы дат в днях. Если вывод - число, это прошлое, если положительное число - будущее. Надеюсь, это поможет.

// Calculate the difference in days

function dateDiffDays(date1, date2) {
  return Math.round((new Date(new Date(date2)).setHours(12)-new Date(new Date(date1)).setHours(12))/8.64e7);
}

// ============ test ==============
var today=Date.now()                 // today's date
console.log(dateDiffDays(today,"2020-05-25"))    // yesterday -1
console.log(dateDiffDays(today,"2020-05-27"))    // tomorrow 1
console.log(dateDiffDays(today,"2021-05-27"))    // 366 days in future
console.log(dateDiffDays(today,"2019-05-27"))    // -365 days in te past
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...