developer.jelix.org n'est plus utilisée, et existe uniquement pour son historique. Postez les nouveaux tickets sur le compte github.
#623 closed enhancement (fixed)
Méthode substract perso
Reported by: | hadrien | Owned by: | |
---|---|---|---|
Priority: | normal | Milestone: | Jelix 1.2 beta |
Component: | jelix:utils | Version: | 1.0.4 |
Severity: | normal | Keywords: | |
Cc: | Blocked By: | ||
Blocking: | Documentation needed: | no | |
Hosting Provider: | Php version: |
Description
Voici une méthode pour jDateTime que j'ai recodé pour nos besoins personnels. Si ça vous tente, faites en bon usage :
/**
* Substract a date with another
*
* @return OBDate
* @author Hadrien Lanneau <hadrien@over-blog.com>
*/
public function substract($date = null)
{
if (!$date)
{
$date = new OBDate();
$date->now();
}
$newDate = new OBDate();
$items = array(
'second',
'minute',
'hour',
'day',
'month',
'year'
);
foreach ($items as $k => $i)
{
$newDate->{$i} = $date->{$i} - $this->{$i};
if ($newDate->{$i} < 0)
{
switch ($i)
{
case 'second':
case 'minute':
$sub = 60;
break;
case 'hour':
$sub = 24;
break;
case 'day':
switch ($this->month)
{
// Mois à 31 jours
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
$sub = 31;
break;
// Mois à 30 jours
case 4:
case 6:
case 9:
case 11:
$sub = 30;
break;
// Février
case 2:
if ($this->year % 4 == 0 and
!(
$this->year % 100 == 0 and
$this->year % 400 != 0
))
{
// Bissextile
$sub = 29;
}
else
{
$sub = 28;
}
break;
}
break;
case 'month':
$sub = 12;
break;
default:
$sub = 0;
}
$newDate->{$i} = abs($sub + $newDate->{$i});
if (isset($items[$k+1]))
{
$date->{$items[$k+1]}--;
}
}
}
return $newDate;
}
Change History (8)
comment:1 Changed 13 years ago by hadrien
comment:2 Changed 13 years ago by bballizlife
When providing new features or enhancement, thanks for following the guidelines.
Thank you too for explaining why do you provide such code. We already have a sub() method in jDateTime class, why proposing another one ? If your is better, correcting some bugs, ... explain us please ;)
comment:3 Changed 13 years ago by hadrien
Cette méthode a été écrite car la méthode durationTo ne nous convenait pas. Bugguée dans les précédentes version et renvoyant un jDuration dans la 1.0.4, là où nous avions besoin d'un jDateTime.
Cette méthode renvoie un jDateTime contenant le nombre d'année, mois, jour, heure, minute et secondes de différences entre deux jDateTime en prenant en compte les mois de 30/31 jours et les années bissextiles. Le traitement se fait uniquement sur des comparaisons des des variables de chacun des objets, pas d'utilisation de fonction de date. La méthode devrait donc être très rapide et rester très précise.
Les points de vue concernants les différences entre deux dates étant très disparates, je ne me permet pas de proposer un patch sur Jelix et vous laisse ce code au cas où il vous plairait.
comment:4 Changed 13 years ago by bballizlife
Thanks for the description ! Now we could analyze the ticket with more informations.
comment:5 Changed 13 years ago by laurentj
- Component changed from jelix to jelix:utils
comment:6 Changed 11 years ago by laurentj
- Milestone set to Jelix 1.2
- Resolution set to fixed
- Status changed from new to closed
commited. http://hg.jelix.org/jelix/jelix-trunk/rev/0ee3786294e1
thanks for your patch
comment:7 Changed 11 years ago by laurentj
- Documentation needed set
comment:8 Changed 10 years ago by foxmask
- Documentation needed unset
OBDate étant une classe héritant de jDateTime…