Voglio condividere la risoluzione di un problema che mi si è presentato con l'uso dell'oggetto Date() di Javascript.
Dovendo controllare che due date non fossero a più di 7 giorni di distanza l'una dall'altra ho pensato bene di utilizzare l'oggetto Date() ed il relativo metodo setDate().
In soldoni, prese data1 e data2 e assumendo che esse siano crescenti cronologicamente ho necessità di sapere se esse si distanziano per più di 7 giorni.
Come suggerito in più "punti" del web, perfino dall'autorevole w3schools (come dimostra lo screenshot del 7 ottobre 2010), per incrementare una data di N giorni basta inserire +N all'interno del setDate.
Questa cosa è più facile spiegarla fornendo il codice:
ok? tutto bene…
fate una prova e funziona tutto… giusto?
Si, in effetti la cosa funziona bene quando dobbiamo aggiungere 5 giorni (seguo l'esempio) alla data corrente (oggi), ma se dobbiamo creare una data sulla base di una data passata?
Mi spiego meglio:
mettiamo che il nostro myDate dell'esempio non sia la data corrente, ma una data del passato (12 agosto 1991) e che vogliamo creare una nuova data, 5 giorni più vecchia di myDate, nell'esempio myOffsetDate questo è quello che saremmo portati a fare:
quello che mi aspetto è che la mia variabile myOffsetDate, diventi uguale a myDate +5 giorni, ovvero 17 agosto 1991, ma quello che succede è tutt'altro! Oggi, 7 ottobre 2010, myOffsetDate diventerebbe 17 ottobre 2010! Oggi 20 dicembre 2010, myOffsetDate diventerebbe 17 dicembre 2010!
In pratica il comando setDate aggiunge 5 giorni a myDate e li assegna a myOffsetDate, ma ignorando completamente il mese e l'anno che così rimangono quelli dell'inizializzazione ( new Date(); ).
Allora come facciamo a risolvere questo drammatico problema? Semplicemente utilizzando altri metodi che vengono in nostro soccorso: setMonth() e setFullYear().
Soluzione!
Tornando al problema originariamente posto, volendo verificare se due date siano sfasate per più di 7 giorni potremmo scrivere:
Grazie ai metodi setMonth() e setFullYear() riusciamo ad ottenere il risultato sperato.
Spero di essere stato sufficientemente esaustivo e soprattutto utile a quanti si trovino ad affrontare questo problema.