161 messaggi dal 07 settembre 2009
Salve a tutti =)
mi rendo conto che il titolo è al quanto bizzarro ma non saprei come riassumere quanto segue.

Stò usando il datePicker di jquery per selezionare delle date. Alla selezione della data di partenza voglio che la data di arrivo si imposti sul giorno successivo.
Fin qui nessun problema, se non fosse che selezionando i giorni 8 o 9 di qualsiasi mese e anno il giorno successivo "sballa" selezionando il primo giorno del mese e dell'anno selezionati.

Di seguito posto il codice

onSelect: function(dateText, inst){
  dateParts = dateText.match(/(\d+)/g);
  realDate = new Date(dateParts[2], dateParts[1] - 1, parseInt(dateParts[1])+1);
  $(".calendario2").datepicker( "setDate" , realDate)
}


Il problema si trova nella seconda riga, su parseInt(dateParts[1])+1. La somma funziona per tutte le date, tranne che per i giorni 08 e 09 che invece danno come risultato 0.
Perchè? come risolvere la cosa?
Attualmente uso una variabile di appoggio al posto di dateParts[1] a cui assegno il valore 8 o 9 tramite un controllo in cui verifico se il giorno selezionato è uguale a 08 e 09.

Sono sicuro che c'è una spiegazione a tutto questo e un modo più efficace per risolvere il problema... ma non lo conosco.

Come sempre grazie per l'aiuto.



Davide
ciao,

non andrei ad impelagarmi con le regex e il parsing del testo. Prova così:

$(function () { 
    $('.picker').datepicker({
        onSelect: function (date, picker) {
            var date = $(this).datepicker("getDate");

            var tomorrow = new Date();
            tomorrow.setDate(date.getDate() + 1);
                
            $('#nextDay').val(tomorrow);
        }
    })
});

Marco
161 messaggi dal 07 settembre 2009
Ti ringrazio funziona perfettamente.
Tuttavia non capisco come mai il codice di prima creasse quel problema con quei 2 giorni...
Mi piacerebbe saperli giusto per poter evitare il problema in futuro.


Davide
Boh, provato a debuggarlo su chrome/firebug per capire cosa becchi con quella regex?

Ciao!
doppiomango ha scritto:
Sono sicuro che c'è una spiegazione a tutto questo

Certo che c'è una spiegazione: il metodo parseInt di JavaScript vuole due parametri. Il secondo (sebbene sia opzionale) è la base di numerazione (radix). Per risolvere ti basta specificare come radice 10:
var s = "08";
var n1 = parseInt(s); // 8 (!!!)
var n2 = parseInt(s, 10); // 10 (ok!) 

Anche se per molti la modalità di determinazione automatica della radice da usare è un bug di JavaScript, in realtà il comportamento è così "by design". Pare però che le specifche di ECMAScript5 introducano una breaking-change che dovrebbe risolvere questi comportamenti "bizzarri".
Il mio consiglio è comunque quello di specificare sempre la radice.
Puoi trovare tutte le info su MDN a questo indirizzo: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/parseInt/
HTH

Matteo Casati
GURU4.net
161 messaggi dal 07 settembre 2009
@Cradle
Quel regex l'avevo trovato cercando sul web perchè non riuscivo ad ottenere la data in un formato accettabile (ora non ricordo bene la situazione), e con quel regex (che nemmeno io sono riuscito a capire bene cosa fa) la data non mi dava problemi... diciamo che è stato un atto di fede =)

@m.casati
anche io avevo pensato ad un problema di base di numerazione... ma mi sarebbe sembrato più logico se il problema si fosse presentato dando a 8+1 il valore 1 e a 9+1 il valore 2 ecc... mentre tutti i valori davano una somma corretta esclusi 8 e 9 che sommati a 1 davano 1... ad ogni modo da ora cercherò di specificare la radice in modo da evitare problemi.

Grazie a tutti per l'interesse =)


Davide

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.