Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[Date::Manip] soustraire une duree

9 réponses
Avatar
luc2
salut,

question sur Date::Manip (oui je sais, je suis idiot d'utiliser ca) :

j'ai recupere une duree dans la variable $delta.

si je fais DateCalc( $date, $delta ), ca va additionner la duree a la
$date.

comment je fais pour soustraire cette duree ?

9 réponses

Avatar
Paul Gaborit
À (at) 24 Sep 2013 13:41:59 GMT,
luc2 écrivait (wrote):

question sur Date::Manip (oui je sais, je suis idiot d'utiliser ca) :

j'ai recupere une duree dans la variable $delta.

si je fais DateCalc( $date, $delta ), ca va additionner la duree a la
$date.

comment je fais pour soustraire cette duree ?



En supposant une $date et un $delta, on peut faire:

- une addition via:
my $dateres = $date->calc($delta);
ou
my $dateres = $date->calc($delta,0);

- une soustraction via:
my $dateres = $date->calc($delta,1);

Pour en savoir plus, lire la doc de Date::Manip::Calc.

PS: de nos jours, il plus que fortement conseillé d'utiliser DateTime
(et tous ses sous-modules).


--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
Perl en français - <http://perl.mines-albi.fr/>
Avatar
Jean-Louis Morel
Le 24/09/2013 15:41, luc2 a écrit :
salut,

question sur Date::Manip (oui je sais, je suis idiot d'utiliser ca) :

j'ai recupere une duree dans la variable $delta.

si je fais DateCalc( $date, $delta ), ca va additionner la duree a la
$date.

comment je fais pour soustraire cette duree ?




Faire DateCalc($date, "-$delta");

Ne pas oublier les guillemets!

--
JL
http://www.bribes.org/perl
Avatar
luc2
On 2013-09-24, Jean-Louis Morel wrote:

salut,

question sur Date::Manip (oui je sais, je suis idiot d'utiliser ca) :

j'ai recupere une duree dans la variable $delta.

si je fais DateCalc( $date, $delta ), ca va additionner la duree a la
$date.

comment je fais pour soustraire cette duree ?




Faire DateCalc($date, "-$delta");

Ne pas oublier les guillemets!



ca marche pas, la date recuperee est egale a $date.

par contre, j'ai oublie de dire que c'etait la version 5.44 de
Date::Manip
Avatar
luc2
On 2013-09-24, Paul Gaborit wrote:

question sur Date::Manip (oui je sais, je suis idiot d'utiliser ca) :

j'ai recupere une duree dans la variable $delta.

si je fais DateCalc( $date, $delta ), ca va additionner la duree a la
$date.

comment je fais pour soustraire cette duree ?



En supposant une $date et un $delta, on peut faire:

- une addition via:
my $dateres = $date->calc($delta);
ou
my $dateres = $date->calc($delta,0);

- une soustraction via:
my $dateres = $date->calc($delta,1);

Pour en savoir plus, lire la doc de Date::Manip::Calc.



impossible avec la version 5.44 de Date::Manip.

ouais, j'ai oublie de donner la version de ma lib...
Avatar
Jean-Louis Morel
Le 25/09/2013 14:01, luc2 a écrit :
On 2013-09-24, Jean-Louis Morel wrote:

salut,

question sur Date::Manip (oui je sais, je suis idiot d'utiliser ca) :

j'ai recupere une duree dans la variable $delta.

si je fais DateCalc( $date, $delta ), ca va additionner la duree a la
$date.

comment je fais pour soustraire cette duree ?




Faire DateCalc($date, "-$delta");

Ne pas oublier les guillemets!



ca marche pas, la date recuperee est egale a $date.

par contre, j'ai oublie de dire que c'etait la version 5.44 de
Date::Manip




Pour cette version antédiluvienne de Date::Manip le format de delta est
différent. Le petit script suivant :

#!/usr/bin/perl
use strict;
use warnings;
use Date::Manip;

Date_Init("Language = French", "DateFormat=non-US", "TZ=GMT");

print "Date::Manipe version = $Date::Manip::VERSIONn";
my $delta = ParseDateDelta("1 jour");
print "+1 jour = $deltan";

$delta = ParseDateDelta("-1 jour");
print "-1 jour = $deltan";

__END__

donne :

Date::Manipe version = 5.44
+1 jour = +0:0:0:1:0:0:0
-1 jour = -0:0:0:1:0:0:0

alors que la dernière version 6.41 donne :

Date::Manipe version = 6.41
+1 jour = 0:0:0:1:0:0:0
-1 jour = 0:0:0:-1:0:0:0

Donc pour la version 5.44 il faut changer le signe :

$delta =~ s/^(-|+)/$1 eq '+' ? '-':'+'/e;
$date2 = DateCalc($date, $delta);

HTH
Avatar
Paul Gaborit
À (at) 25 Sep 2013 12:03:22 GMT,
luc2 écrivait (wrote):

On 2013-09-24, Paul Gaborit wrote:

En supposant une $date et un $delta, on peut faire:

- une addition via:
my $dateres = $date->calc($delta);
ou
my $dateres = $date->calc($delta,0);

- une soustraction via:
my $dateres = $date->calc($delta,1);

Pour en savoir plus, lire la doc de Date::Manip::Calc.



impossible avec la version 5.44 de Date::Manip.

ouais, j'ai oublie de donner la version de ma lib...



Je ne sais pas de quand date cette version 5.44 mais ce que je sais
c'est que la plus ancienne version encore disponible sur CTAN est la
5.56 qui date de 2010. Cela signifie donc que vous disposez d'une très
vieille version dont la documentation ne semble plus disponible en
ligne.

Ne pourriez-vous mettre à jour vers la version 5.56 ?

Ou, lire la doc qui est installée sur votre machine (via "perldoc
Date::Manip") pour la comparer avec la doc de la version 5.56. S'il n'y
a pas trop de différences, on devrait pouvoir retrouver une manip.

Sur le principe, puisque dans ces vieilles versions, il n'y a pas
d'opérateur de soustraction pour le calcul de dates, il est possible de
calculer l'opposé d'un delta via la manip suivante:

# calcul de "$date + $delta"
my $dateapres = DateCalc($date, $delta);
# calcul de "- $delta"
my $deltaop = DateCalc($dateapres, $date);
# calcul de "$date - $delta"
my $dateavant = DateCalc($date, $deltaop);

--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
Perl en français - <http://perl.mines-albi.fr/>
Avatar
luc2
On 2013-09-25, Jean-Louis Morel wrote:

Donc pour la version 5.44 il faut changer le signe :

$delta =~ s/^(-|+)/$1 eq '+' ? '-':'+'/e;
$date2 = DateCalc($date, $delta);



j'ai fait quelque chose de similaire, et je n'en suis pas tres fier...
mais bon, avec des libs aussi vieilles, on fait ce qu'on peut...

merci pour votre reponse
Avatar
luc2
On 2013-09-25, Paul Gaborit wrote:

Je ne sais pas de quand date cette version 5.44 mais ce que je sais
c'est que la plus ancienne version encore disponible sur CTAN est la
5.56 qui date de 2010. Cela signifie donc que vous disposez d'une très
vieille version dont la documentation ne semble plus disponible en
ligne.

Ne pourriez-vous mettre à jour vers la version 5.56 ?



non, les admins de la machine en question ont peur que la mise a jour
perturbe les autres scripts du serveur.

Ou, lire la doc qui est installée sur votre machine (via "perldoc
Date::Manip") pour la comparer avec la doc de la version 5.56. S'il n'y
a pas trop de différences, on devrait pouvoir retrouver une manip.

Sur le principe, puisque dans ces vieilles versions, il n'y a pas
d'opérateur de soustraction pour le calcul de dates, il est possible de
calculer l'opposé d'un delta via la manip suivante:

# calcul de "$date + $delta"
my $dateapres = DateCalc($date, $delta);
# calcul de "- $delta"
my $deltaop = DateCalc($dateapres, $date);
# calcul de "$date - $delta"
my $dateavant = DateCalc($date, $deltaop);



c'est malin, j'y avais pas pense.

merci pour votre reponse.
Avatar
pablodechant
Le mardi 24 Septembre 2013 à 15:41 par luc2 :
salut,

question sur Date::Manip (oui je sais, je suis idiot d'utiliser ca) :

j'ai recupere une duree dans la variable $delta.

si je fais DateCalc( $date, $delta ), ca va additionner la duree a la
$date.

comment je fais pour soustraire cette duree ?


Bonjour
Vous avez besoin d'un financement pour votre maison, pour vos affaires, pour
achat de voiture, pour l'achat de moto, pour la création de vos propres
entreprise, pour vos besoins personnels plus de doute.Nous octroyons des
crédits personnels allant de 2000 jusqu'à 800.000€ avec un taux d'intérêt
nominal de 2% quel que soit le montant. Veuillez nous préciser dans vos
demandes de prêt le montant exact que vous souhaiteriez et la date.
Veuillez nous écrire pour vos prêts personnels :
Sigma Crédit à vos services 24/24 Heures
P.S: je ne prête qu'aux personnes successibles de me rembourser.