Per un progetto in cui è necessario creare un calendario a quattordicine, mi sono imbattuto nella necessità di dover calcolare la distanza in giorni tra due date attraverso Zend_Date di Zend Framework.
Innanzitutto c'è da fare attenzione tra ora legale e solare, poichè facendo una differenza tra date che stanno su sistemi orari diversi vi ritroverete ad avere delle ore in eccesso o in difetto. Dovendo calcolare una differenza di giorni questa cosa vi potrebbe portare alla follia ;-)
Per ignorare il sistema orario solare/legale si possono seguire due alternative:
- Impostare il timezone della data in UTC o GMT, i quali non hanno questa discriminazione, occhio però di farlo prima di assegnare la data, altrimenti vi verrà convertita la data che già avete assegnato.
- Settare, con "setOptions", l'opzione 'fix_dst' a false. In questo modo non verrà effettuato l'aggiustamento all'attraversamento del cambio di sistema orario.
Ma veniamo al calcolo della differenza. La classe Zend_Date ha dei metodi per la sottrazione di date, con il prefisso sub, occhio però: l'oggetto data su cui chiamerete il metodo conterrà la differenza, per cui se non volete questo comportamento dovete prima clonarla. Ovviamente parto dal presupposto che abbiate impostato il locale nel registro.
$date1 = new Zend_Date(); $date1->setTimezone('UTC'); $date1->set('01/01/2010'); $date2 = new Zend_Date(); $date2->setTimezone('UTC'); $date2->set('15/10/2011'); $diff = $date2->sub($date1); $days = $diff->toValue(Zend_Date::TIMESTAMP) / 86400; var_dump($days); // 652
Devo dire che ho provato ad usare l'opzione fix_dst, come indicato nella documentazione ma non ha sortito effetti sulla correzione dell'ora. Per cui ho optato per il timezone UTC.




Invia nuovo commento