2016-10-27 10 views
-3

Я получил этот массив с дней:Как сравнить две даты в различных форматах в JavaScript/JQuery

var dates = [ 
    /* 2016 */ 
    "October 28, 2016","November 17, 2016","December 24, 2016","December 25, 2016","December 26, 2016", 
    /* 2017 */ 
    "January 1, 2017","March 3, 2017","April 17, 2017","May 1, 2017","May 8, 2017","July 5, 2017","July 6, 2017","September 28, 2017","October 28, 2017","November 17,2017","December 24, 2017","December 25, 2017","December 26, 2017" 
] 

и я хочу, чтобы сравнить их с завтрашнего дня, поэтому я создал переменную завтра

var tomorrow = new Date(); 
tomorrow .setDate(tomorrow.getDate() + 1); 
tomorrow .setHours(0); 
tomorrow .setMinutes(0); 
tomorrow .setSeconds(0); 
tomorrow .setMilliseconds(0); 

Когда я пытаюсь dates.indexOf(tomorrow) Я получаю результат -1.

Значение tomorrow является Fri Oct 28 2016 00:00:00 GMT+0200 (Střední Evropa (letní čas))


EDIT: я изменил даты массив

var dates = [ 
    /* 2016 */ 
    new Date("October 28, 2016"), new Date("November 17, 2016"), new Date("December 24, 2016"), new Date("December 25, 2016"), new Date ("December 26, 2016"), 
    /* 2017 */ 
    new Date("January 1, 2017"), new Date("March 3, 2017"), new Date("April 17, 2017"), new Date("May 1, 2017"), new Date("May 8, 2017"), new Date("July 5, 2017"), new Date("July 6, 2017"), new Date("September 28, 2017"), new Date("October 28, 2017"), new Date("November 17,2017"), new Date("December 24, 2017"), new Date("December 25, 2017"), new Date("December 26, 2017") 
] 

и теперь, когда я сравниваю значение tomorrow «s, который Fri Oct 28 2016 00:00:00 GMT+0200 (Střední Evropa (letní čas)) с функцией dates.indexOf(tomorrow), я все равно получите результат -1.

dates[0] значение Fri Oct 28 2016 00:00:00 GMT+0200 (Střední Evropa (letní čas)) значение

tomorrow «s является Fri Oct 28 2016 00:00:00 GMT+0200 (Střední Evropa (letní čas))

Это же, почему результат не 0?

+0

Вы можете сделать это с помощью чистого javascript, но обработка даты в javascript не простая, .. Есть такие библиотеки, как http://momentjs.com/, которые делают это намного проще. – Keith

+2

Ваш массив массивов представляет собой массив текста. Я бы предложил вам Google, как работать с датами в javascript. – OrangeKing89

+1

Не связано с вопросом, но вместо того, чтобы вручную создавать новую дату каждый раз, вы можете использовать функцию '.map()', чтобы сделать жизнь немного легче. Пример: 'var date = [/ * Даты в виде строки. * /]. map (function (d) {return new Date (d)}) '. –

ответ

2

Вы можете создать переменную даты, как это:

var date = new Date("October 28, 2016") 

Посмотрите на JavaScript Date Reference

в вашем коде, вместо tomorrow .setDate(zitrek.getDate() + 1); вы должны иметь tomorrow .setDate(tomorrow.getDate() + 1);

EDIT Преобразовать даты массива в переменные даты, вам просто нужно вызвать цикл («для», «пока») или карту для чтения из вашего массива, например:

var dates = [ 
    /* 2016 */ 
    "October 28, 2016","November 17, 2016","December 24, 2016","December 25, 2016","December 26, 2016", 
    /* 2017 */ 
    "January 1, 2017","March 3, 2017","April 17, 2017","May 1, 2017","May 8, 2017","July 5, 2017","July 6, 2017","September 28, 2017","October 28, 2017","November 17,2017","December 24, 2017","December 25, 2017","December 26, 2017" 
]; 

//define your dates array and tomorrow var before this 
//... now we use the dates array 
for(var i = 0; i<dates.length; i++){ //dates.length is the size of your array 
    var temp_date = new Date(dates[i]); 
    console.log(dates[i]); //your strings 
    console.log(temp_date); //your date from the strings 
    //... do calculations here with temp_date 
} 
+0

Спасибо, я изменил его. – Kyrbi

+1

для второй строки завтра .setDate (zitrek), это была просто опечатка, я перевел свой код с чешского на английский и забыл перевести одну переменную. Теперь он зафиксирован в моем вопросе. :) – Kyrbi

+1

Проверьте мое обновление, а не 'zitrek', который не определен, вы должны использовать' tomorow'. EDIT: OK –

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