Не удалось сравнить дату ввода с текущей датой, используя JavaScript - PullRequest
0 голосов
/ 30 марта 2019

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

var user_date='01-04-2019';
var todayDate = new Date();
var todayMonth = todayDate.getMonth() + 1;
var todayDay = todayDate.getDate();
var todayYear = todayDate.getFullYear();
if (todayDay < 10) {
    todayDay = '0' + todayDay;
}
if (todayMonth < 10) {
    todayMonth = '0' + todayMonth;
}
var todayDateText = todayDay + "-" + todayMonth + "-" + todayYear;
var inputToDate = Date.parse(user_date);
var todayToDate = Date.parse(todayDateText);
console.log(todayDateText);
//console.log(mydate);
if (inputToDate > todayToDate) {
    alert("the input is later than today");
}else{
    alert("the input is earlier than today");
}

Здесь я получаю предупреждение else part, в котором дата ввода пользователя более поздняя, ​​чем сегодняшняя дата.

Ответы [ 3 ]

1 голос
/ 30 марта 2019

Проблема с Date.parse(), который не анализирует DD-MM-YYYY правильно. Вот рабочий пример с MM-DD-YYYY ( Примечание: YYYY-MM-DD рекомендуется )

var user_date = '03-01-2019'; // MM-DD-YYYY
var todayDate = new Date();
var todayMonth = todayDate.getMonth() + 1;
var todayDay = todayDate.getDate();
var todayYear = todayDate.getFullYear();
if (todayDay < 10) {
  todayDay = '0' + todayDay;
}
if (todayMonth < 10) {
  todayMonth = '0' + todayMonth;
}
var todayDateText = todayMonth + "-" + todayDay + "-" + todayYear;
var inputToDate = Date.parse(user_date);
var todayToDate = Date.parse(todayDateText);
console.log(inputToDate, todayToDate);
console.log(user_date, todayDateText);
if (inputToDate > todayToDate) {
  alert("the input is later than today");
} else {
  alert("the input is earlier than today");
}

Чтобы преобразовать DD-MM-YYYY в MM-DD-YYYY, используйте

var user_date ='01-03-2019'; // DD-MM-YYYY
var datePieces = user_date.split("-"); 
console.log([datePieces[1] , datePieces[0] , datePieces[2]].join("-")); // 03-01-2019
0 голосов
/ 30 марта 2019

Не используйте Date.parse.Не гарантируется понимание строки даты в формате dd-mm-yyyy:

console.log(Date.parse('01-04-2019'))

Вместо этого используйте 2 + -аргумент Date конструктор и сравните даты напрямую:

var userDate = new Date(2019, 3 /* months are 0-indexed */, 1);
var todayDate = new Date();

// drop the time part of todayDate
todayDate.setHours(0, 0, 0, 0);

if (userDate > todayDate) {
    alert("the input is later than today");
} else {
    alert("the input is no later than today");
}
0 голосов
/ 30 марта 2019

Кстати, в будущем попробуй momentJS . Это сторонняя библиотека, которую многие разработчики используют для работы со временем и датами, потому что все мы знаем, что это неприятно в ванильном Javascript.

https://momentjs.com

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...