Calcolare una differenza di data con Zend_Date | Ing. Eugenio Bonifacio
Tags: applicazioni sms, applicazioni web, cataloghi elettronici, commercio elettronico, consulenza agenzie web, consulenza opensource, consulenza oscommerce, consulenza Drupal, consulenza Wordpress, consulenza Zend Framework, e-commerce, portali web, sistemi di prenotazione, sistemi informativi, siti web comiso, siti web ragusa, siti web sicilia, software personalizzati, sviluppo firmware, programmatore php freelance, sviluppatore zend framework, sviluppatore doctrine, programmatore zend framework, programmatore doctrine, sviluppatore cakephp
2
Giu 10

Calcolare una differenza di data con Zend_Date

 

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.