Ecco un altro episodio che mi ha insegnato come sia necessario sapere prima di fare.
Il compito che mi era stato assegnato era semplicissimo: mostrare una data formattata in JavaScript, tipo 7 Ottobre 2012
. Che difficoltà poteva esserci?
JavaScript fornisce l’oggetto Date
che ha molti metodi e, scorrendo nella documentazione, senza leggere il compito di ogni metodo ho selezionato:
- Date.getDay(): per il giorno del mese.
- Date.getMonth(): per il mese.
- Date.getFullYear(): per l’anno.
Creo il mio script. Dato che mi avevano richiesto che il mese fosse visualizzato con il nome in Italiano, ho creato un array con tutti i vari nomi:
var mesi = ['Gennaio', 'Febbraio', 'Marzo', 'Aprile', 'Maggio', 'Giugno', 'Luglio', 'Agosto', 'Settembre', 'Ottobre', 'Novembre', 'Dicembre']; var date = new Date(); console.log(date.getDay() + ' ' + mesi[date.getMonth()] + ' ' + date.getFullYear());
Questo succedeva il 5 Ottobre 2012, che per la cronaca era un Venerdì. Guardo l’output: 5 Ottobre 2012
. Perfetto, tutto funziona.
Il giorno dopo Sabato 6 Ottobre 2012 faccio un controllo: 6 Ottobre 2012
: tutto OK.
Oggi, Domenica 7 Ottobre 2012, ricevo un IM, in cui mi avvertono che la data in output è strana. Corro a controllare: 0 Ottobre 2012
.
Cos’era successo?
Non riuscivo a capire cosa potesse significare quel valore. Quand’è così, vado sempre alle basi, quindi in questo caso, alla documentazione. Come era prevedibile, l’errore era umano.
La mia ignoranza mi aveva portato a credere che Date.getDay()
restituisse il giorno del mese. Invece il suo compito è restituire il giorno della settimana, da 0 a 6, 0 essendo Domenica, e 6 essendo Sabato. La funzione corretta per recuperare il giorno del mese è Date.getDate()
.
Come hai potuto sbagliare?
In questo caso l’ignoranza è andata di pari passo alla più totale coincidenza di eventi: lo script è stato creato Venerdì 5 Ottobre 2012, e getDay()
ha restituito 5, riferito a Venerdì, mentre io ho letto 5 riferito al giorno del mese. Lo stesso è successo Sabato 6 Ottobre 2012. La Domenica, ovviamente, si è presentato il problema. Pura coincidenza.
Cosa hai imparato?
Studiare. Bisogna studiare, e mai affidarsi alle sensazioni perché quello che può essere ovvio per una persona non lo è per un’altra. Io probabilmente avrei chiamato le funzioni getDayOfWeek
e getDayOfMonth
, ma io sono io.
Inoltre, questo mi ha confermato che è vero che tutti i problemi si verificano sempre di Domenica!
Leave a Reply