developer.jelix.org n'est plus utilisée, et existe uniquement pour son historique. Postez les nouveaux tickets sur le compte github.
#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)
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
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
Proposition de patch avec tests unitaires