IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Contribuez Discussion :

Petite fonction d'ajout et modification de date


Sujet :

Contribuez

  1. #1
    Membre régulier Avatar de bruce207
    Inscrit en
    Novembre 2007
    Messages
    319
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 319
    Points : 124
    Points
    124
    Par défaut Petite fonction d'ajout et modification de date
    Bonjour,
    comme dit le titre cette fonction permet d'ajouter des jours, des mois, des années a une date et avoir la date retour. Ce qui n'est pas possible avec WD12 si le format de la date dépasse. A copier et coller et mettre comme procédure globale. Paramètres :
    sGenre : <A ou a = Ajout ; R ou r = Retrait> a s'il s'agit d'un ajout et r s'il s'agit d'un retrait
    sType : <J pour jour, M pour mois, A pour Année ; <= 31>
    nChif : <le nombre réel à incrémenter>
    dDateAmod1 (date) : <DateAmod la date à modifier>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    PROCEDURE ModifierDate(sGenre , sType, nChif, dDateAmod1 est une Date)
     
    dDateArenv, dDateTampon, dDateAmod est une Date
    VarJour, VarMois, nVarAn, i est un entier = 0
     
    dDateAmod = dDateAmod1
     
    SELON Majuscule(sType)
    	CAS "J"
    		SELON Majuscule(sGenre)
    			CAS "R"
    				SELON nChif
    					CAS < dDateAmod..Jour
    						VarJour = dDateAmod..Jour - nChif
    						VarMois = dDateAmod..Mois
    						nVarAn = dDateAmod..Année
    					CAS >= dDateAmod..Jour	
    						VarJour = nChif - dDateAmod..Jour
    						SELON dDateAmod..Mois
    							//Cas de Janvier, on revient àDécembre de l'année passée
    							CAS 1
    								VarJour = 31 - VarJour
    								VarMois = 12
    								nVarAn = dDateAmod..Année - 1
    							//Cas de Février
    							CAS 3
    								dDateTampon..Jour = dDateAmod..Jour
    								dDateTampon..Mois = 2
    								dDateTampon..Année = dDateAmod..Année
    								i = DernierJourMois(dDateTampon)
     
    								VarJour = i - VarJour
    								VarMois = 2
    								nVarAn = dDateAmod..Année
    							AUTRE CAS
    								dDateTampon..Jour = dDateAmod..Jour
    								dDateTampon..Mois = dDateAmod..Mois - 1
    								dDateTampon..Année = dDateAmod..Année
    								i = DernierJourMois(dDateTampon)
     
    								VarJour = i - VarJour
    								VarMois = dDateAmod..Mois - 1
    								nVarAn = dDateAmod..Année
    						FIN
    					AUTRE CAS
     
    				FIN
    			CAS "A"
    				//Etablissement du dernier jour du mois de la date
    				dDateTampon..Jour = dDateAmod..Jour
    				dDateTampon..Mois = dDateAmod..Mois
    				dDateTampon..Année = dDateAmod..Année
    				i = DernierJourMois(dDateTampon)
     
    				SELON (nChif + dDateAmod..Jour)
    					CAS < i
    						VarJour = dDateAmod..Jour + nChif
    						VarMois = dDateAmod..Mois
    						nVarAn = dDateAmod..Année
    					CAS > i	
     
    						SELON dDateAmod..Mois
    							//Cas de Décembre, on revient à Janvier de l'année suivante
    							CAS 12
    								VarJour = (nChif + dDateAmod..Jour) - i
    								VarMois = 1
    								nVarAn = dDateAmod..Année + 1
    							AUTRE CAS									
    								VarJour = (nChif + dDateAmod..Jour) - i
    								VarMois = dDateAmod..Mois + 1
    								nVarAn = dDateAmod..Année
    						FIN
     
    					AUTRE CAS
    						VarJour =  i
    						VarMois = dDateAmod..Mois
    						nVarAn = dDateAmod..Année
     
    				FIN
    			AUTRE CAS
     
    		FIN
    	CAS "M"
    		SELON Majuscule(sGenre)
    			CAS "R"
    				SELON nChif
    					CAS < dDateAmod..Mois
    						VarJour = dDateAmod..Jour
    						VarMois = dDateAmod..Mois - nChif
    						nVarAn = dDateAmod..Année
    					CAS >= dDateAmod..Mois
    						VarJour = dDateAmod..Jour
    						VarMois = 12 - (nChif + dDateAmod..Mois)
    						nVarAn = dDateAmod..Année - 1
    					AUTRE CAS
     
    				FIN
    			CAS "A"
    				SELON (nChif + dDateAmod..Mois)
    					CAS = 12
    						VarJour = dDateAmod..Jour
    						VarMois = 12
    						nVarAn = dDateAmod..Année
    					CAS < 12
    						VarJour = dDateAmod..Jour
    						VarMois = dDateAmod..Mois + nChif
    						nVarAn = dDateAmod..Année
    					CAS > 12
    						VarJour = dDateAmod..Jour
    						VarMois = (nChif + dDateAmod..Mois) - 12
    						nVarAn = dDateAmod..Année + 1
    					AUTRE CAS
     
    				FIN
    			AUTRE CAS
     
    		FIN
    	CAS "A"
    		SELON Majuscule(sGenre)
    			CAS "R"
    				VarJour = dDateAmod..Jour
    				VarMois = dDateAmod..Mois
    				nVarAn = dDateAmod..Année - 1
    			CAS "A"
    				VarJour = dDateAmod..Jour
    				VarMois = dDateAmod..Mois
    				nVarAn = dDateAmod..Année + 1
    			AUTRE CAS
     
    		FIN		
    	AUTRE CAS
     
    FIN
     
    dDateArenv..Jour = VarJour
    dDateArenv..Mois = VarMois
    dDateArenv..Année = nVarAn
     
    RENVOYER dDateArenv
    et voici la fonction DernierJourMois qui donne le dernier jour du mois d'une date
    Paramètres :
    mDate (date) : <Date dont on veut connaitre le dernier jour du mois>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    PROCEDURE DernierJourMois(mDate est une Date)
    dDate est une Date
    dPDate est une Date
    dDate..Jour = 1
    dPDate..Jour = 1
    dDate..Mois = mDate..Mois
    dDate..Année = mDate..Année
    dPDate..Année = dDate..Année
    SI mDate..Mois < 12 ALORS
    	dPDate..Mois = dDate..Mois + 1
    SINON
    	dPDate..Mois = 1
    	dPDate..Année = mDate..Année + 1
    FIN
    RENVOYER DateDifférence(dDate, dPDate)
    J'espère que ça va aussi vous aider. Bon dev.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mars 2002
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2002
    Messages : 899
    Points : 1 100
    Points
    1 100
    Par défaut
    Citation Envoyé par bruce207 Voir le message
    et voici la fonction DernierJourMois qui donne le dernier jour du mois d'une date
    Paramètres :
    mDate (date) : <Date dont on veut connaitre le dernier jour du mois>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    PROCEDURE DernierJourMois(mDate est une Date)
    dDate est une Date
    dPDate est une Date
    dDate..Jour = 1
    dPDate..Jour = 1
    dDate..Mois = mDate..Mois
    dDate..Année = mDate..Année
    dPDate..Année = dDate..Année
    SI mDate..Mois < 12 ALORS
    	dPDate..Mois = dDate..Mois + 1
    SINON
    	dPDate..Mois = 1
    	dPDate..Année = mDate..Année + 1
    FIN
    RENVOYER DateDifférence(dDate, dPDate)
    Je ne voudrais pas te décourager, mais ça me parait plus simple, et ça fonctionne très bien (en 14 et 15 en tous cas, mais je me souviens qu'en 12 j'avais quelques soucis pour les additions de parties de dates)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Procédure DernierJourMois(local dDate est une date = DateDuJour())
    dDate..jour = 1
    dDate..mois++
    dDate..jour--
    renvoyer dDate
    Je suppose que le code de la première fonction peut être épuré dans le même sens.

  3. #3
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    2 325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 325
    Points : 3 838
    Points
    3 838
    Par défaut
    En effet, tu te compliques la vie et je suis en 12.

  4. #4
    Membre régulier Avatar de bruce207
    Inscrit en
    Novembre 2007
    Messages
    319
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 319
    Points : 124
    Points
    124
    Par défaut
    En effet les gars, surtout à toi Bowen, vous avez raison y a plus simple. J'ai modifié et voici le résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    PROCEDURE ChangerDate(sGenre , sType, nChif, dDateAmod1 est une Date)
     
    dDateArenv, dDateTampon, dDateAmod est une Date
    VarJour, VarMois, nVarAn, i est un entier = 0
     
    dDateAmod = dDateAmod1
     
    SELON Majuscule(sType)
    	CAS "J"
    		SELON Majuscule(sGenre)
    			CAS "R"
    				dDateAmod..Jour -= nChif
    			CAS "A"
    				dDateAmod..Jour += nChif
    		FIN
    	CAS "M"
    		SELON Majuscule(sGenre)
    			CAS "R"
    				dDateAmod..Mois -= nChif
    			CAS "A"
    				dDateAmod..Mois += nChif
    			AUTRE CAS
     
    		FIN
    	CAS "A"
    		SELON Majuscule(sGenre)
    			CAS "R"
    				dDateAmod..Année -= nChif
    			CAS "A"
    				dDateAmod..Année += nChif
    			AUTRE CAS
     
    		FIN		
    	AUTRE CAS
     
    FIN
     
    RENVOYER dDateAmod

  5. #5
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mars 2002
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2002
    Messages : 899
    Points : 1 100
    Points
    1 100
    Par défaut
    Si tu tiens vraiment à faire une fonction pour ça, je te conseille plutôt quelque chose dans ce goût là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    PROCEDURE ChangerDate(LOCAL sGenre est une chaine , LOCAL sType est une Chaîne, LOCAL nChif est un entier, LOCAL dDateAmod est une Date)
    SI Majuscule(sGenre) = "R" alors nChiff = nChiff * (-1)
    SI PAS Majuscule(sGenre) _dans_ ("R", "A") _OU_ PAS Majuscule(sType) _DANS_ ("J", "M", "A") ALORS
    	Erreur("Mauvais appel de procédure ""ChangerDate""")
    	STOP	//te permettra de déboguer le mauvais appel en mode test
    SINON
    	SELON Majuscule(sType)
    		CAS "J"
    			dDateAmod..Jour += nChif
    		CAS "M"
    			dDateAmod..Mois += nChif
    		CAS "A"
    			dDateAmod..Année += nChif
    	FIN
    FIN
    RENVOYER dDateAmod
    Tu noteras que :
    • Les paramètres sont transmis avec le mot clé "LOCAL" devant. Ils sont donc passés par valeur, et non par référence. ça évite d'avoir à déclarer autant de paramètres locaux à ta fonction.
    • Si elle est mal appelée, la Fonction renvoie la date d'origine tout comme la tienne. Mais elle affiche une erreur et arrête le code lorsqu'on est en mode test.

    Et pour ta fonction DernierJourDuMois() que tu avais créé à l'origine, elle est maintenant native en version 16. (comme DernierJourDeLaSemaine() et PremierJourDuMois())

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/11/2013, 15h23
  2. Petite fonction php permettant d'afficher la date et l'heure en français
    Par gentil2005 dans le forum Contribuez / Téléchargez Sources et Outils
    Réponses: 10
    Dernier message: 08/10/2013, 17h45
  3. [Probléme] Fonction modification de date
    Par maloute80 dans le forum Langage
    Réponses: 8
    Dernier message: 04/12/2007, 09h17
  4. [Dates] Fonction date: ajouter 3 jours à une date
    Par bobic dans le forum Langage
    Réponses: 8
    Dernier message: 12/03/2007, 12h05
  5. fonction modification de date
    Par cormami dans le forum Access
    Réponses: 2
    Dernier message: 03/08/2006, 14h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo