Ошибка сравнения дат при использовании оператора> = в Javascript - PullRequest
0 голосов
/ 05 июня 2018

Привет. Я пытаюсь сравнить даты объектов, которые имеют отношение к сегодняшнему или будущему.Если это со вчерашнего дня и раньше, оно не должно появляться.Это условия.

Когда я сравниваю сегодняшнюю дату с new Date(), это условие должно быть истинным, но оно возвращает ложное значение, поэтому в результате условия не работают должным образом.Что не так с этим кодом?

data = [
   '0': {type: "recare", value: "Hello", date: "2018-06-05", ... },
   '1': {type: "tocall", value: "World", date: "2018-06-13", ... },
   '2': {type: "recare", value: "People", ...}
];

console.log(new Date(data[0].date) >= new Date())
//returns: false

    console.log(new Date(data[1].date) >= new Date())
//returns: true

Почему он возвращает false?для 2-го объекта возвращается значение true, так как 06-13 находится в будущем по сравнению с сегодняшним днем ​​(06-05)

Ответы [ 3 ]

0 голосов
/ 05 июня 2018

если вы попытаетесь записать первые два значения, вы увидите различный вывод

const data = [
    { type: 'recare', value: 'Hello', date: '2018-06-05' },
    { type: 'tocall', value: 'World', date: '2018-06-13' },
    { type: 'recare', value: 'People' },
];
// this will evaulate to the date since the day started 00:00
console.log(new Date(data[0].date));
// this will evaulate to the current time 
console.log(new Date()) ; 
 // so new Date() is >= than new Date(data[0].data) ; 
// so this will be false 
console.log(new Date(data[0].date) >= new Date());

вы можете сравнить 2 даты с другими реквизитами, такими как, например, getHours и getMonth , есть много других реквизитов, которые вы можетеиспользуйте

, чтобы узнать больше об объекте Date Javascript Date MDN

0 голосов
/ 05 июня 2018

@ Сэм , попробуйте следующий код.

var data = [
   {type: "recare", value: "Hello", date: "2018-06-05" },
   {type: "tocall", value: "World", date: "2018-06-13" },
   {type: "recare", value: "People", date: "2018-06-06"}
]

var date = new Date()
console.log(date)
var year = date.getFullYear() 
var month = date.getMonth() 
var day = date.getDate()

console.log(year, month, day)

var today = new Date(year, month, day)
console.log(new Date(data[0].date) >= today) // returns false

console.log(new Date(data[0].date) == today); //returns: true

console.log(new Date(data[1].date) > today); //returns: true

Вывод:

Tue Jun 05 2018 22:41:27 GMT+0200 (CEST)
2018 5 5
true
false
true

Обратите внимание на следующие 2 строки:коды, как указано выше решение основано на этом.

✓ Следующие 2 утверждения эквивалентны друг другу

console.log(new Date("2018-08-07"));
console.log(new Date(2018, 7, 7)); // month ranges from 0-11 in call to Date() contructor

Вывод:

Tue Aug 07 2018 02:00:00 GMT+0200 (CEST)
Tue Aug 07 2018 00:00:00 GMT+0200 (CEST)
0 голосов
/ 05 июня 2018

Потому что новый Date () также включает компонент текущего времени.Вы можете исправить это, используя new Date (). SetHours (0,0,0,0).

data = [
   {type: "recare", value: "Hello", date: "2018-06-06" },
   {type: "tocall", value: "World", date: "2018-06-13" },
   {type: "recare", value: "People"}
];

console.log(new Date(data[0].date) >= new Date().setHours(0,0,0,0))
//returns: false

    console.log(new Date(data[1].date) >= new Date().setHours(0,0,0,0))
//returns: true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...