PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → Question de base pour manipuler les Dates
Question de base pour manipuler les Dates
Iniciado por Jean Turcotte, 11,abr. 2019 13:54 - 15 respuestas
Miembro registrado
1.405 mensajes
Publicado el 11,abril 2019 - 13:54
Bonjour,

J'utilise un calendrier pour sélectionner une date, que je transfert dans une variable de type Date. Je veux seulement additionner un jour à la fois ex DateSuivante = Dateactuelle + 1 mais je n'y arrive.

Avec toutes l'étendue de commandes possibles dans WD, je n'ose imaginer qu'il n'y a pas de commandes pour simplifier ces type de manipulation. Je sais que je peux manipuler des chaines pour y arriver mais le changement de mois et d'année pause réellement problème.

Je sais que ça semble une question simple mais après avoir passé quelques heures à fouiller dans l'aide PCSOFT, je n'y arrive pas.
DateDebut est Date = SAI_DateDébut
DateSuivante est Date

// Fusion de la table pour les jours de la semaine
POUR i = x À (x-1) + gnNombrePersoPlanif
TABLE_Entetes[1][i] = DateVersChaîne(DateDebut, "JJJJ JJ MMM")
TABLE_Entetes[1][i]..Fusion = fusionCelluleSuivante
TABLE_Entetes[1][i]..CouleurFond = CouBlankColonne
FIN
x = x + gnNombrePersoPlanif + 2
POUR i = x À (x-1) + gnNombrePersoPlanif
DateSuivante = DateDebut + 1
TABLE_Entetes[1][i] = DateVersChaîne(DateSuivante, "JJJJ JJ MMM")
TABLE_Entetes[1][i]..Fusion = fusionCelluleSuivante
TABLE_Entetes[1][i]..CouleurFond = CouBlankColonne
FIN

Dites-moi que vous savez comment faire.

--
Jean Turcotte
WX 24
Android 8.0 sur Galaxy S8
Laptop Lenovo I7 12GB Ram
Miembro registrado
231 mensajes
Publicado el 11,abril 2019 - 14:46
Salut Regarde du coté dateversentier puis entierversdate.
ta date vers un entier puis + 1 et cet entier tu lui fais un entier vers date.
Bon dév.

--
Stéphane.
Mensaje modificado, 11,abril 2019 - 14:48
Miembro registrado
1.405 mensajes
Publicado el 11,abril 2019 - 15:20
Bonjour Stephane, c'est une excellente idée mais si je fais ca, je dois gérer les 30 et 31 de fin de mois, les changements de mois et d'années manuellement et c'est un vrai casse-tete.

--
Jean Turcotte
WX 24
Android 8.0 sur Galaxy S8
Laptop Lenovo I7 12GB Ram
Publicado el 11,abril 2019 - 15:39
Il n'y a pas plus simple:

DateSuivante..jour+=1 //Ajoute un jour
DateSuivante..jour+=28 //Ajoute 28 jours
DateSuivante..mois+=3 //Ajoute 3 mois

etc...
Publicado el 11,abril 2019 - 15:44
Jean TURCOTTE a écrit :
Bonjour Stephane, c'est une excellente idée mais si je fais ca, je dois gérer les 30 et 31 de fin de mois, les changements de mois et d'années manuellement et c'est un vrai casse-tete.

--
Jean Turcotte
WX 24
Android 8.0 sur Galaxy S8
Laptop Lenovo I7 12GB Ram


Ben, non, fais ce que te dit Stéphane et tout ira bien,.
Je fais ça depuis windev 4.1
Miembro registrado
1.405 mensajes
Publicado el 11,abril 2019 - 16:19
Si je dit Date = "20190411"
et que je fait: JourSuivant = Date..jour+=
Le résultat est "12" et non "20190412" comme désiré ?

Dois-je alors concatener Date..Annee + Date..Mois + Date..JourSuivant ?

--
Jean Turcotte
WX 24
Android 8.0 sur Galaxy S8
Laptop Lenovo I7 12GB Ram
Miembro registrado
231 mensajes
Publicado el 11,abril 2019 - 16:29
Si tu fais dateversentier
dateversentier(20191231) il te donne exemple 1558623 don tu fais +1 se qui fait entierversdate(1558624) il te donne 20200101, je vois pas en quoi tu te prends la tête, ou je n'ai pas compris ta demande...

--
Stéphane.
Miembro registrado
40 mensajes
Publicado el 11,abril 2019 - 16:34
Bonjour,

comme l'explique Eric, il n'y a pas plus simple !!!

DateDebut est Date = SAI_DateDébut
DateSuivante est Date

// Fusion de la table pour les jours de la semaine
POUR i = x A (x-1) + gnNombrePersoPlanif
TABLE_Entetes[1][i] = DateVersChaîne(DateDebut, "JJJJ JJ MMM")
TABLE_Entetes[1][i]..Fusion = fusionCelluleSuivante
TABLE_Entetes[1][i]..CouleurFond = CouBlankColonne
FIN

// Solution 1
x = x + gnNombrePersoPlanif + 2
POUR i = x A (x-1) + gnNombrePersoPlanif
DateSuivante=DateDebut
DateSuivante..Jour+=i // On rajoute i jours à DateDebut (ça prend en compte les 28/29/30/31 pour changement mois/année)
TABLE_Entetes[1][i] = DateVersChaîne(DateSuivante, "JJJJ JJ MMM")
TABLE_Entetes[1][i]..Fusion = fusionCelluleSuivante
TABLE_Entetes[1][i]..CouleurFond = CouBlankColonne
FIN

// Solution 2
x = x + gnNombrePersoPlanif + 2
DateSuivante=DateDebut // Initialisation à DateDebut
POUR i = x A (x-1) + gnNombrePersoPlanif
DateSuivante..Jour+=1 // On rajoute 1 jour à DateSuivante (ça prend en compte les 28/29/30/31 pour changement mois/année)
TABLE_Entetes[1][i] = DateVersChaîne(DateSuivante, "JJJJ JJ MMM")
TABLE_Entetes[1][i]..Fusion = fusionCelluleSuivante
TABLE_Entetes[1][i]..CouleurFond = CouBlankColonne
FIN


Cordialement,
Laurent33
Publicado el 11,abril 2019 - 16:36
Tout simplement

dTemp est Date = "20190412"
dNext est Date = dTemp
dNext..Jour++

Bonne journée
Stef
Miembro registrado
1.405 mensajes
Publicado el 11,abril 2019 - 17:05
Le résultat me donne "13", y a t-il moyen d'obtenir la date entiere "20190413" ? ou dois-je concatener chaque partie.

--
Jean Turcotte
WX 24
Android 8.0 sur Galaxy S8
Laptop Lenovo I7 12GB Ram
Miembro registrado
139 mensajes
Publicado el 11,abril 2019 - 17:49
Je ne vois vraiment pas pourquoi tu n'y arrive pas !

Attention. Si tu utilise la propriété ..Jour pour incrémenter une date, il ne faut pas passer par une variable intermédiaire, sinon, c'est la variable que tu incrémentes, pas la date (ce qui correspond peut-être à ton résultat "13")

Bref, reproduit le code complet et on pourra t'aider
Publicado el 11,abril 2019 - 17:57
Je le répette, il n'y a pas plus simple !

Il faut déclarer ta variable en tant que 'Date'

MaDate est une date // Prend par défaut la date du jour soit
aujourd'hui "20190411"

MaDate..jour+=4 //Ajoute 4 jours
Trace(MaDate) // Donnera "20190415"
Trace(MaDate..jour) // Donnera "15"
Trace(MaDate..mois) // Donnera "04"

etc...
Miembro registrado
1.405 mensajes
Publicado el 11,abril 2019 - 18:09
Stéphane a écrit :
Tout simplement

dTemp est Date = "20190412"
dNext est Date = dTemp
dNext..Jour++

Bonne journée
Stef


Voici le code utilisé.
Merci de votre patience.

--
Jean Turcotte
WX 24
Android 8.0 sur Galaxy S8
Laptop Lenovo I7 12GB Ram
Publicado el 11,abril 2019 - 18:49
Jean TURCOTTE a écrit :

Avec toutes l'étendue de commandes possibles dans WD, je n'ose imaginer qu'il n'y a pas de commandes pour simplifier ces type de manipulation.

Je sais que ça semble une question simple mais après avoir passé quelques heures à fouiller dans l'aide PCSOFT, je n'y arrive pas.


Dites-moi que vous savez comment faire.

--
Jean Turcotte


Ahah,

Avez-vous bien (re)lu la doc sur le type Date, puis ses propriétés, puis sur les fonctions ?
Stop, pas la peine d'aller jusqu'aux fonctions.
Arrêtez-vous le temps nécessaire sur les propriétés, ce que beaucoup négligent si j'en crois les réponses fréquemment données.

Par exemple (et ce n'en est qu'un parmi d'autres des possibilités qu'ouvrent ces propriétés) pour revenir à votre question : un petit extrait de la doc sur la propriété ..Jour, visible ici : https://doc.pcsoft.fr/fr-FR/?2512043&name=Jour

Cas 2 : Opérations sur les jours
Lors d'opérations sur les dates, le changement de mois est automatiquement géré. Ainsi, si le nombre de jours est supérieur au nombre de jours valide pour le mois manipulé, le nombre de jours repart de 1 et le numéro du mois est automatiquement modifié. L'année est également modifiée si nécessaire (mois de décembre par exemple).

TOUT cela automatiquement !

Et c'est du même tonneau pour toutes les propriétés des types Date, Heure et DateHeure.
Donc, vaut, enfin valent, le détour.

Bonne lecture

Hemgé
Miembro registrado
86 mensajes
Publicado el 11,abril 2019 - 18:53
Bonjour
Je confirme la solution d'Eric
Bon dev

--
On a le droit de ne pas savoir, on n'a pas le droit de ne pas apprendre
Jean Claude Boulet
Miembro registrado
1.405 mensajes
Publicado el 11,abril 2019 - 22:32
Merci à vous tous pour votre aide,

Malgré le fait d'avoir lu toute la doc sur les DATE, je suis encore en apprentissage et je me rends bien compte, que mon problème à l'origine n'en était pas un et que j'y était presque. Il me manquais juste le petit coup de main que vous m'avez offert.

Sachez messieurs, que je l'apprécie vraiment!
Au plaisir ! :)

--
Jean Turcotte
WX 24
Android 8.0 sur Galaxy S8
Laptop Lenovo I7 12GB Ram