[Date::Manip] soustraire une duree

Le
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 ?
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Paul Gaborit
Le #25682012
À (at) 24 Sep 2013 13:41:59 GMT,
luc2
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 - Perl en français -
Jean-Louis Morel
Le #25682072
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
luc2
Le #25683782
On 2013-09-24, Jean-Louis Morel
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
luc2
Le #25683842
On 2013-09-24, Paul Gaborit
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...
Jean-Louis Morel
Le #25684162
Le 25/09/2013 14:01, luc2 a écrit :
On 2013-09-24, Jean-Louis Morel
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
Paul Gaborit
Le #25684262
À (at) 25 Sep 2013 12:03:22 GMT,
luc2
On 2013-09-24, Paul Gaborit
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 - Perl en français -
luc2
Le #25693022
On 2013-09-25, Jean-Louis Morel
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
luc2
Le #25693012
On 2013-09-25, Paul Gaborit
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.
pablodechant Hors ligne
Le #25829702
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.

Publicité
Poster une réponse
Anonyme