Calcul de date (j+1) a partir d'une variable

Fermé
Jip06 Messages postés 7 Date d'inscription mardi 29 août 2006 Statut Membre Dernière intervention 5 février 2007 - 29 août 2006 à 12:11
 Super Sheep - 7 sept. 2009 à 15:54
Bonjour,

Je voudrais ajouter un jour dans une date chargée dans une variable (sous le format ymd).
un peu comme ceci -> wdate= `date "+%d %m %y" | awk '{print $3""$2""$1+1}'` mais en utilisant non pas la fonction date comme sur ce modèle mais une variable $1 = 060823.

Je voudrais obtenir wdate=060824

Pouvez vous m'aider !

merci
A voir également:

7 réponses

ATTENTION !

Pour avoir utilisé le code de lami20j, dans un script, un bug très subtile s'est glissé :

En effet, comme le décalage horaire n'est pas géré, ce script n'incrémentera jamais le jour du passage à l'heure d'hiver, car 26/10/2008 00:00:00 + 24 heures = 26/10/2008 23:00:00 !

Solution simple puisque les heures ne sont pas gérées ici : Ajouter 25h au lieu de 24h à l'intervalle de temps.

Voilà, si ça peut servir à l'internaute qui passera par là ;)
3
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
1 sept. 2006 à 23:10
Salut,

voilà un petit code en Perl

La méthode utilisé est de ajouter de secondes EPOCH

- d'abord je converti en secondes EPOCH la date qui se trouve dans la variable
- je fait les manipulations nécessaires
- je permet la saisie d'un nombre de jours de decalage
- je calcule la nouvelle date en secondes EPOCH
- je converti en date

A toi d'adapter.
#!/usr/bin/perl
#
use warnings;use strict;

use Time::Local;

# la date ( aammjj ) contenu dans une variable scalaire
my $d='060824';
my ($a,$m,$j) = unpack("A2" x (length($d)/2), $d);
print "La date initiale : $a$m$j\n";

# conversion en secondes EPOCH
my $ed = timelocal(0,0,0,$j,$m - 1,$a);


# Ajout d'un nombre de jours
print "Entrez le decalage [nombre jours] : ";
chomp(my $decalage = <STDIN>);
my $intervalle = $decalage * 60 * 60 * 24;

# calculer la nouvelle date
my $resultat = $ed + $intervalle;

# conversion de secondes EPOCH en date format aammjj
my ($jj,$mm,$aa) = (localtime($resultat))[3,4,5];

$jj = sprintf("%02d",$jj);
$mm = sprintf("%02d",$mm + 1);
$aa = substr(($aa + 1900),-2);

my $d_res = "$d + $decalage : $aa$mm$jj";

print "$d_res\n";
__END__
Une autre méthode pourra être l'utilisation du moduel Date::Calc du CPAN.

lami20j
2
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 896
29 août 2006 à 14:44
Salut,

Je suis pas sûr d'avoir tout bien saisi là !!!

Si c'est ça que tu veux (enfin, quelque chose d'approchant) :
[jp@MDK tmpfs] $ A=23

[jp@MDK tmpfs] $ B=$(expr $A + 1)

[jp@MDK tmpfs] $ echo $B

24

[jp@MDK tmpfs] $
Je ne pense pas que ça puisse s'adapter à ce que tu veux faire...

;-))
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 896
29 août 2006 à 15:07
Re-

Juste pour ta mise en forme un peu longuette, essaie ça :
date "+%y%m%d" --date='1day'
;-))
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Jip06 Messages postés 7 Date d'inscription mardi 29 août 2006 Statut Membre Dernière intervention 5 février 2007
29 août 2006 à 15:30
Ben en fait, si j'ai une variable $1 contenant la valeur '20060831' par exemple, je voudrais, en ajoutant 1 jour obtenir la valeur '20060901' .
Il faudrait que je puisse convertir ma variable en date, ajouter 1 au jour et récupérer le résultat.

suis-je plus clair !!!

merci
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 896
1 sept. 2006 à 14:51
shell KSH, jour+1 à partir d'une variable
[81.255.193.xxx - smtp.organic.fr] Ajouté par Jip06
2006-09-01 12:31:55 (GMT+2)
Statut : En cours


Bonjour,

je sais, j'ai déjà posté un message à ce sujet mais je n'ai pas eu de réponse satisfaisante. Pourtant ce n'est tout de m^me pas la lune que je veux attraper.

En KSH, comment puis-je ajouter un jour à partir d'une date issu d'un paramètre saisi (string).

Par exemple dans le script:

datesaisi=$1 # on recupère 060831

# je voudrais faire +1 dans le jour et récuperer 060901
# il faut donc que je puisse convertir le format string en format date et faire + 1 au jour mais en KSH, à priori, je ne peux faire +1 sur le jour que dans la fonction date et la fonction date n'accepte pas de constante ('060831').

Dois-je utiliser un autre langage (comme PERL) pour arriver à mes fins ? Et comment puis-je faire ?

Merci de votre aide, conseils, etc ...
0
une autre solution peut-être plus propre serait de faire le calcul à midi au lieu de minuit...
(en cas de chevauchement avec un changement d'heure, on passe à 11h ou 13h, mais il n'y a pas d'impact sur le jour) :

# conversion en secondes EPOCH
my $ed = timelocal(0,0,12,$j,$m - 1,$a);
0