developer.jelix.org is not used any more and exists only for history. Post new tickets on the Github account.
developer.jelix.org n'est plus utilisée, et existe uniquement pour son historique. Postez les nouveaux tickets sur le compte github.

Opened 13 years ago

Closed 13 years ago

Last modified 12 years ago

#425 closed enhancement (fixed)

add a jDuration object

Reported by: laurentj Owned by: flh
Priority: normal Milestone: Jelix 1.1 beta 1
Component: jelix:utils Version: 1.0
Severity: minor Keywords:
Cc: Blocked By:
Blocking: #453 Documentation needed: no
Hosting Provider: Php version:

Description

Some methods of jDateTime accept or return a jDateTime object, which contains in fact a duration, not a date. So it is not really clear. It should accept or return an other object like a "jDuration" object.

Attachments (1)

jduration.patch (12.0 KB) - added by flh 13 years ago.
Proposition de patch avec tests unitaires

Download all attachments as: .zip

Change History (9)

comment:1 Changed 13 years ago by flh

  • Blocking 453 added
  • Owner set to flh
  • Status changed from new to assigned

Changed 13 years ago by flh

Proposition de patch avec tests unitaires

comment:2 Changed 13 years ago by flh

La représentation d'une durée est un truc bien épineux : il est impossible de convertir systématiquement un mois en jours, ni un jour en heures (à cause des heures d'été/hiver). J'ai choisi une représentation stockant la différence en mois/jour/secondes (un an devient 12 mois, etc.).

Cela a l'air de bien fonctionner (tests unitaires inclus) : il reste les bizarreries inhérentes à la représentation d'une durée : 31 mars + 1 mois, cela fait-il 30 avril ou 1er mai ? Pour l'instant le module choisit 1er mai (c'est le plus facile à implémenter), mais il n'est pas exclu que l'on fournisse un jour une option pour forcer l'autre comportement (à l'image de l'option end_of_month de DateTime::Duration en Perl).

comment:3 Changed 13 years ago by flh

  • review set to review?

comment:4 Changed 13 years ago by laurentj

  • review changed from review? to review-

Salut,

+            if(isset($init['day'])){
+                $this->days += intval($init['days']);
+            }

Ça devrait être 'day' et pas 'days'.

@@ -386,33 +388,39 @@
      * @param int $second second with 2 digits
      */
     public function sub($year, $month=0, $day=0, $hour=0, $minute=0, $second=0) {
-        if ($year instanceof jDateTime) {
+        if ($year instanceof jDuration) {
             $dt = $year;
         } else {
             $dt = new jDateTime($year, $month, $day, $hour, $minute, $second);
         }

Je pense que le else devrait être plutôt (les tests passent pas : Fatal error: Call to undefined method jDateTime::mult()) :

         } else {
-            $dt = new jDateTime($year, $month, $day, $hour, $minute, $second);
+            $dt = new jDuration(array("year" => $year, "month" => $month,
+                "day" => $day, "hour" => $hour, "minute" => $minute,
+                "second" => $second));
         }

Après correction de ces erreurs, il reste quand même des erreurs découvertes dans les tests unitaires :

Fail: /home/jouanneau/public_html/jelixapp/testapp/modules/jelix_tests/tests/utils.jdatetime.html_cli.php -> testjDateTime -> testsetFromString -> Equal expectation fails with member [year] because [Integer: 2007] differs from [Integer: 2006] by 1 at [/home/jouanneau/public_html/jelixapp/testapp/modules/jelix_tests/tests/utils.jdatetime.html_cli.php line 173]
Exception: /home/jouanneau/public_html/jelixapp/testapp/modules/jelix_tests/tests/utils.jdatetime.html_cli.php -> testjDateTime -> testsetFromString -> Unexpected PHP error [Object of class jDateTime could not be converted to int] severity [E_NOTICE] in [/home/jouanneau/public_html/jelixapp/lib/jelix/utils/jDuration.class.php] line [42]

Il manque aussi la déclaration des fichiers testapp/modules/jelix_tests/tests/utils.jduration.html_cli.php et lib/jelix/utils/jDuration.class.php dans les fichiers manifests pour le build, mais je les rajouterais lors du checkin si tu ne le fais pas.

au fait, veux-tu un accés en écriture au dépôt svn ?

comment:5 Changed 13 years ago by laurentj

  • Documentation needed unset
  • Resolution set to fixed
  • review review- deleted
  • Status changed from assigned to closed

Ayant besoin de cette classe, j'ai finalement fait les petites corrections qui s'imposait.

Patch appliqué dans le trunk. Merci pour ce patch Florian :-)

comment:6 Changed 13 years ago by flh

Pas de quoi, même si j'ai été trop débordé ces temps-ci pour réussir à en faire un patch propre. :-)

comment:7 Changed 12 years ago by laurentj

  • Documentation needed set

comment:8 Changed 12 years ago by laurentj

  • Documentation needed unset
Note: See TracTickets for help on using tickets.