2013-06-12 12 views
5

Sto provando a verificare se una data da un DatePicker dell'interfaccia utente jQuery appartiene a una serie di date che sono festività. Non riesco a capire cosa sto facendo male :(Verifica se la data appartiene alla serie di date

var holidayArray2013 = [new Date('October 3, 2013 00:00:00 GMT+0200'), new Date('December 25, 2013 00:00:00 GMT+0100'), new Date('December 26, 2013 00:00:00 GMT+0100')]; 
var DateOfOrder = $('#datepicker').datepicker('getDate'); 
if ($.inArray(DateOfOrder, holidayArray2013) > -1) { 
    console.log("is holiday"); 
} 

edit: console.log(DateOfOrder); rendimenti Thu Oct 03 2013 00:00:00 GMT+0200 proprio come holidayArray2013[0] ma $.inArray(DateOfOrder, holidayArray2013) restituisce ancora -1

+2

né possiamo a meno che non ci dicono se c'è un errore, o forse non dare il risultato che ci si aspetta. – Jamiec

+1

Qual è il valore di 'DateOfOrder'? –

+1

Stai cercando due oggetti separati anche se potrebbero essere la stessa data. Sarà necessario memorizzare le date come stringa e cercare una stringa (un modo possibile). – Xotic750

risposta

16

Stai diventando un falso negativo, perché si confrontano 2 oggetti data a confronto loro riferimenti e non i loro valori come forse previsto.

ci sono alcune opzioni, è possibile memorizzare il risultato di Date.getTime() nella propria matrice che è solo una rappresentazione numerica della data:

var holidayArray2013 = [ 
     new Date('October 3, 2013 00:00:00 GMT+0200').getTime(), 
     new Date('December 25, 2013 00:00:00 GMT+0100').getTime(), 
     new Date('December 26, 2013 00:00:00 GMT+0100').getTime()]; 

e quindi confrontare che:

var DateOfOrder = n$('#datepicker').datepicker('getDate').getTime(); 
if ($.inArray(DateOfOrder, holidayArray2013) > -1) ... 

Questo funziona bene, come dimostrato qui: http://jsfiddle.net/rRJer/

Se, tuttavia si sono costretti a non modificare l'array di festività che si potrebbe ripetere per cercare di individuare il giusto valore di data:

var isHoliday = false; 
for(var i=0;i<holidayArray2013.length;i++){ 
    if(holidayArray2013[i].getTime() == DateOfOrder.getTime()){ 
     isHoliday = true; 
     break; 
    } 
} 

demo è qui: http://jsfiddle.net/3R6GD/

+0

grazie jamie, accettato per essere la risposta più precisa e fornire un'alternativa di cui avevo bisogno. – foozed

1

controllo questo http://jsfiddle.net/WNYRs/

var holidayArray2013 = [new Date('October 3, 2013 00:00:00 GMT+0200').getTime(), 
         new Date('December 25, 2013 00:00:00 GMT+0100').getTime(), 
         new Date('December 26, 2013 00:00:00 GMT+0100').getTime()]; 

E usare qualcosa di simile:

var DateOfOrder = new Date($('#datepicker').datepicker({ dateFormat: 'yy-mm-dd' }).val()).getTime(); 

è necessario utilizzare Date.getTime() per confrontare due date, vedere questo: How to compare two date values with jQuery

0

È possibile utilizzare la funzione .valueOf() sopra le date, poi il $.inArray farà il lavoro:

var holidayArray2013 = [ 
    new Date('October 3, 2013 00:00:00 GMT+0200').valueOf(), 
    new Date('December 25, 2013 00:00:00 GMT+0100').valueOf(), 
    new Date('December 26, 2013 00:00:00 GMT+0100').valueOf() ]; 

var DateOfOrder = $('#datepicker').datepicker('getDate').valueOf(); 
if ($.inArray(DateOfOrder, holidayArray2013) > -1) { 
    console.log("is holiday"); 
} 

Vedi http://jsfiddle.net/mmeRD/

Problemi correlati