Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
Je cherche à calculer et afficher la durée écoulée depuis une certaine date.
Dans la théorie je soustrais le timestamp de la date de début au timestamp de la date actuelle.
Je récupère donc au préalable le timestamp d'une date stockée dans MySQL comme ceci :
$model = $this ->select() ->from(array('e' => $this->_name), array('dateDebut' => 'UNIX_TIMESTAMP(e.dateDebut)'));
Je calcule ensuite le timestamp de la durée écoulée et j'affiche cette durée :
$timestampDuree = time() - $row->dateDebut; // stocker dans une date $duree = new Zend_Date($timestampDuree, Zend_Date::TIMESTAMP); // et l'afficher echo $date->get(Zend_Date::HOUR); // Nombre d'heures écoulées echo $date->get(Zend_Date::MINUTE); // Nombre de minutes écoulées echo $date->get(Zend_Date::SECOND); // Nombre de secondes écoulées
Le problème est que le nombre d'heure est égal à 01 au lieu de 00.
Pour les minutes et les secondes c'est cohérent mais pas pour les heures.
En effectuant la soustraction d'autres manières, cela donne le même résultat.
Par exemple :
// date actuelle $duree = new Zend_Date(); // soustraire le timestamp de la date de début $duree->sub($timestampDuree, Zend_Date::TIMESTAMP);
Même résultat
Est ce normal ? Comment faire pour avoir une durée cohérentes (nombre d'heures, minutes et secondes).
En attendant je fais de la manière suivante, mais j'ai l'impression que ce n'est pas très optimisé :
$dateDebut = new Zend_Date($row->dateDebut, Zend_Date::TIMESTAMP); $duree = new Zend_Date(); $duree->sub($dateDebut->get(Zend_Date::HOUR_SHORT), Zend_Date::HOUR_SHORT); $duree->sub($dateDebut->get(Zend_Date::MINUTE_SHORT), Zend_Date::MINUTE_SHORT); $duree->sub($dateDebut->get(Zend_Date::SECOND_SHORT), Zend_Date::SECOND_SHORT);
Merci beaucoup,
Lukas.
Dernière modification par Lukas P. (20-03-2009 11:15:53)
Hors ligne
Il me semble avoir vu un snippet qui faisait ça...
Je crois que c'est celui-là : http://www.zfsnippets.com/snippets/view/id/39
Hors ligne
En effet, c'est précisément le but que je recherchais à atteindre.
Merci beaucoup
(Par contre je ne comprends toujours pas pourquoi j'obtenais 01 heures à chaque fois, mais soit :p)
Hors ligne
La différence de timestamp donne une durée, mais ça n'est plus un timestamp. Un timestamp, c'est le nombre de secondes depuis le 01/01/1970.
Donc quand tu fais new Zend_Date(_différence_de_timestamp_, Zend_Date::TIMESTAMP), tu calcules une date un peu après 1970, pas du tout une durée.
Sinon le plus simple sur ta différence de timestamp, c'est de faire tes divisions toi même. Pour un calcul de durée, Zend_Date n'apporte pas grand chose. Il n'y a plus tous les problèmes d'années bissextiles, de localisation et autres joyeusetés liées au dates...
A+, Philippe
Hors ligne
Pages: 1