[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Strano errore, ma di chi? [probabilmente OT]



Il 02 novembre 2010 13:34, Giorgio Bompiani <gbomp@fastwebnet.it> ha scritto:

> Salve a tutti, ho riscontrato la seguente stranezza:
> Un mio applicativo, scritto in php e che usa mysql compie alcune operazioni
> sulle date. Poiché mysql non le esegue direttamente nelle sue query, per
> aggiungere n giorni ad una data prendo dal db questa data in secondi,
> aggiungo il numero di secondi dato da n*3600*24 e salvo il risultato nel db,
> sempre in secondi.
> Fino ad ora ha funzionato tranquillamente, ma poi la settimana scorsa c'era
> il cambio di orario ed è risultato che se n è tale da superare la data
> fatidica il risultato perde un giorno. Ovviamente al di fuori di questa
> situazione le due date differiscono di n giorni cioè se la prima cade di
> giovedì e n=7 anche la seconda cade di giovedì.
> Sono andato subito a vedere se succede lo stesso problema a marzo con il
> cambiamento inverso. Lì tutto bene come sempre. Altra prova che ho fatto è
> su un pc Windows dove gira lo stesso applicativo: stesso problema.
> Qualche idea in merito (a parte quella che io abbia "le traveggole")?

Non vedo perché lo sia... :)

Ok, uccidimi... :)

Tu quando chiedi una data al sistema lui te la rende come data del
calendario più l'ora. Giusto? Bene. A questo punto aggiungerci i
secondi ti porta ad una data che è la stessa data + i giorni alla
stessa ora. Fin qui tutto a posto.

Però questo non tiene conto che ci sono due stonature: i cambi dell'ora.

A marzo hai 1 giorno di 23 ore (tiro l'ora avanti), ma questo non gli
crea casini, visto che la stessa ora del giorno dopo sarà
verosimilmente un'ora più avanti. Se l'ora di riferimento è 00.01, la
1.01 è sempre il giorno dopo, quindi per quello che ti serve non
cambia: sei sempre al giorno successivo

Ad ottobre, però, quel giorno è di 25 ore e questo lo fa sbarellare:
se l'ora di riferimento di cui sopra casca a 00.01, passa alle 23.01,
che, sfiga, si traduce nella perdita di un giorno... CVD :)

Insomma, è la formula n*3600*(24) che scazza... ;P

Ciao,
Simone


Reply to: