Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 20-03-2009 11:14:05

Lukas P.
Membre
Date d'inscription: 28-12-2008
Messages: 11

[Zend_date] Soustraire 2 timestamp pour afficher une durée

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 :

Code:

$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 :

Code:

$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 :

Code:

// 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 sad

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é :

Code:

$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

 

#2 20-03-2009 17:48:20

oVa
Nouveau membre
Lieu: Toulouse
Date d'inscription: 20-02-2009
Messages: 9

Re: [Zend_date] Soustraire 2 timestamp pour afficher une durée

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

 

#3 21-03-2009 11:16:45

Lukas P.
Membre
Date d'inscription: 28-12-2008
Messages: 11

Re: [Zend_date] Soustraire 2 timestamp pour afficher une durée

En effet, c'est précisément le but que je recherchais à atteindre.

Merci beaucoup smile

(Par contre je ne comprends toujours pas pourquoi j'obtenais 01 heures à chaque fois, mais soit :p)

Hors ligne

 

#4 22-03-2009 08:43:44

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: [Zend_date] Soustraire 2 timestamp pour afficher une durée

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


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages