Countdown personalizzato

Come sviluppatore ho una decisa avversione verso il sistema di computo del tempo attualmente in uso.

Utilizzare cicli nidificati con periodi variabili da 7 a 24 a [28,29,30,31] a [59,60,61] a [365,366] unità per contare la medesima cosa non è esattamente quello che fa felice un programmatore. Se poi si aggiunge un lunedì festivo che va innanzi e indietro nel calendario a seconda (letteralmente) di come gli gira la luna, abbiamo completato il teatrino.

Nonostante i linguaggi attuali abbiano ricche funzioni di libreria per limitare i danni di questo metodo di computo del tempo figlio di tradizioni antiche mai cambiate, c’è ancora qualcuno che ne cade vittima:

Come tutti sappiamo che 19 Zellini fanno una Falce e che 17 Falci fanno un Galeone, sappiamo anche che 24 ore fanno un giorno, quindi il conto alla rovescia di cui sopra dovrebbe essere scritto (magari con un font più leggibile) -5g 3h eccetera.

Dal momento che i gadget di conto alla rovescia non sono una novità per Internet, sono andato a vedere il sorgente, di cui riporto un pezzo:

var end = new Date('01 Nov 2012');
var _second = 1000;
var _minute = _second * 60;
var _hour = _minute * 60;
var _day = _hour *24;
var timer;

function showRemaining() {
    var now = new Date();
    var distance = end - now;
    if (distance < 0 ) {
        // handle expiry here..
        clearInterval( timer );
        //alert('Expired');
    }
    var days = Math.floor(distance / _day);
    var hours = Math.floor( (distance % _day ) / _hour )+8;
    var minutes = Math.floor( (distance % _hour) / _minute );
    var seconds = Math.floor( (distance % _minute) / _second );

La versione originale del codice JavaScript calcola il conto alla rovescia fino alla mezzanotte di un giorno, quindi l’incauto programmatore che ha modificato lo script aggiungendo quel +8 sulla riga del calcolo delle ore ha pensato di aver elegantemente risolto il suo problema.

E invece ha due problemi.

Il primo è quello evidenziato sopra dovuto al fatto di aver aggiunto diabolicamente le otto ore al contatore delle ore anziché all’ora di riferimento per il conto alla rovescia. Dal momento che l’oggetto Date può essere istanziato passando come parametro o una serie di numeri o una stringa, ipotizzando che si voglia fare un conto alla rovescia che termini alle otto della mattina del primo novembre, la prima riga del codice riportato poteva essere

var end = new Date('01 Nov 2012 08:00');

Ma i patimenti con il computo del tempo non sono mai finiti. Alle 03:00 del 28 ottobre viene introdotta l’ora invernale, quindi il conto alla rovescia di cui sopra ha un’ora di differenza a seconda che lo si guardi prima o dopo il cambio.

Dal momento che il countdown è riferito ad un evento italiano, per porre rimedio al problema di cambio di ora di riferimento e per renderlo indipendente dal fuso orario, si sarebbe potuta scrivere la prima riga così:

var end = new Date('01 Nov 2012 08:00 GMT+0100 (CET)');

In questo modo il numero ritornato nella variabile end sarebbe stato corretto, ipotizzando sempre che il conteggio debba terminare alle 8 di mattina.

E magari qualcuno ha riso della deliberata assurdità della divisione della valuta nei libri della Rowling… (grazie a Chiara per la segnalazione)

Autore: Luigi Rosa

Consulente IT, sviluppatore, SysAdmin, cazzaro, e, ovviamente, geek.

6 pensieri riguardo “Countdown personalizzato”

  1. Si potrebbe dividere il calendario in 5 Paeioui: Pandi`, Pendi`, Pindi`, Pondi` e Pundi`.

    Ogni Paeiou e’ comporsto di 73 Giorni:

    Gro, Gru, Gro_Gru, Gru_Gru, Gro_Gro_Gru, … Gro_Gro_Gro_Gru_Gro_Gro_Gru

    🙂


  2. …sappiamo anche che 24 ore fanno un giorno…

    Fai lezione a dei quindicenni e cambierai radicalmente idea su questo concetto.

    🙂

    1. Quanto è brutto Java??? 😀

      Comunque l’incipit del tuo commento, ne spiega perfettamente il finale. 😉

Spazio per un commento