Précédent   Forum du club des développeurs et IT Pro > Environnements de développement > WinDev > Contribuez
Contribuez Vos contributions pour la rubrique Windev : articles, cours, tutoriels, faq, comparatifs, tests, sources, ...
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 20/07/2010, 12h40   #1
bruce207
Membre régulier
 
Avatar de bruce207
 
Inscription : novembre 2007
Messages : 318
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 318
Points : 80
Points : 80
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 :
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 :
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.
bruce207 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2010, 13h07   #2
Bowen
Membre émérite
 
Homme
Inscription : mars 2002
Messages : 846
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 35
Localisation : France

Informations forums :
Inscription : mars 2002
Messages : 846
Points : 907
Points : 907
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 :
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 :
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.
Bowen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/07/2010, 17h37   #3
Lo²
Membre Expert
 
Homme
Développeur informatique
Inscription : juin 2004
Messages : 1 222
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

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

Informations forums :
Inscription : juin 2004
Messages : 1 222
Points : 1 512
Points : 1 512
En effet, tu te compliques la vie et je suis en 12.
Lo² est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2012, 21h29   #4
bruce207
Membre régulier
 
Avatar de bruce207
 
Inscription : novembre 2007
Messages : 318
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 318
Points : 80
Points : 80
En effet les gars, surtout à toi Bowen, vous avez raison y a plus simple. J'ai modifié et voici le résultat :
Code :
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
bruce207 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 16h01   #5
Bowen
Membre émérite
 
Homme
Inscription : mars 2002
Messages : 846
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 35
Localisation : France

Informations forums :
Inscription : mars 2002
Messages : 846
Points : 907
Points : 907
Si tu tiens vraiment à faire une fonction pour ça, je te conseille plutôt quelque chose dans ce goût là :
Code :
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())
Bowen est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 06h16.


 
 
 
 
Partenaires

Hébergement Web