Rechercher : dans
Par :

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

Dernière réponse le 7 sep 2009 à 15:54:32 Jip06, le 29 aoû 2006 à 12:11:16 
 Signaler ce message aux modérateurs

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

Configuration: unix aix + shell KSH

Meilleures réponses pour « calcul de date (j+1) a partir d'une variable » dans :
VBScript - Les fonctions de date et de temps VoirLes fonctions de date et de temps Fonction Description Date Retourne la date du système DateAdd(interval, number, date) Ajoute un intervalle de temps (interval) à une...
VBScript - Les variables VoirLe concept de variable Une variable est un objet repéré par son nom, pouvant contenir des données, qui pourront être modifiées lors de l'exécution du programme. Il s'agit en fait d'une zone de la mémoire réservée pour le stockage d'une valeur. Les...
Javascript - L'objet Date VoirLes particularités de l'objet Date L'objet Date permet de travailler avec toutes les variables qui concernent les dates et la gestion du temps. Il s'agit d'un objet inclus de façon native dans Javascript, et que l'on peut toujours utiliser. La...

1

jipicy, le 29 aoû 2006 à 14:44:23

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...

;-))
Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

2

jipicy, le 29 aoû 2006 à 15:07:27

Re-

Juste pour ta mise en forme un peu longuette, essaie ça :

date "+%y%m%d" --date='1day'
;-)) Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

3

Jip06, le 29 aoû 2006 à 15:30:52

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

Répondre à Jip06

4

jipicy, le 1 sep 2006 à 14:51: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 ...

Répondre à jipicy

5

lami20j, le 1 sep 2006 à 23:10:55

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

Répondre à lami20j

6

Kitof, le 29 jui 2009 à 16:39:51
  • +2

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à ;)

Répondre à Kitof

7

 Super Sheep, le 7 sep 2009 à 15:54:32

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);

Répondre à Super Sheep