Mémo Dates
Comparatifs des ordres de manipulation de dates
n YEARS | n MONTHS | n DAYS |
n HOURS | n MINUTES | n SECONDS |
%YEARS(n) | %MONTHS(n) | %DAYS(n) |
%HOURS(n) | %MINUTES(n) | %SECONDS(n) |
AAAA | représente le nombre d'années |
MM | le nombre de mois |
JJ | le nombre de jours |
Fonctions liées aux dates
SQL | Retourne | Exemple SQL | RPG | Exemple RPG |
DATE(x) X doit être une chaîne au format SQL en cours |
une date | DATE( |
%DATE(x:*FMT) | wdate =%DATE( datchar:*DMY) ; |
DAY(D) DAYOFMONTH(D) |
la partie jour de D | DAY(DATCDE) |
%SUBDT(d:*D) | jj = %SUBDT( DATCDE:*D) ; |
MONTH(D) | la partie mois de D |
|
%SUBDT(d:*M) | mm = %SUBDT( %date():*M) ; |
YEAR(D) | la partie année de D | YEAR(current date -
DATCDE) |
%SUBDT(d:*Y) | mm = %SUBDT( DATCE:*M) ; |
DAYOFYEAR(D) | le n° de jour dans l'année (julien) | DAYOFYEAR(datdep) |
||
DAYOFWEEK(D) | le N° de jour dans la semaine (1 = Dimanche, 2=Lundi, ...) |
DAYOFWEEK(ENTRELE) |
||
DAYOFWEEK_ISO(D) | retourne
le N° de jour dans la semaine (1 = Lundi) |
DAYOFWEEK_ISO(ENTRELE) |
||
DAYNAME(d) | retourne le nom du jour de d (Lundi, Mardi, ...) |
DAYNAME(datcde) |
||
MONTHNAME(d) * | retourne le nom du mois de d (Janvier, Février, ...) |
MONTHNAME(datcde) |
||
EXTRACT(day from d) | Extrait la partie jour de D (aussi Month et Year) |
EXTRACT(MONTH from datcde) |
cf %SUBDT( ) | |
DAYS(D) | retourne le nbr de jours depuis 0001-01-01 | DAYS(datcde)- DAYS(datliv) |
jours = %DIFF( |
|
QUARTER(D) | retourne le n° du trimestre(1-4) | QUARTER(DATEFIN) |
||
WEEK(D) | retourne le n° de semaine (Attention le 1er Janvier est semaine 1) |
WHERE |
||
WEEK_ISO(D) | retourne
le n° de semaine (la semaine 1 est celle qui possède un JEUDI dans l'année.) |
WHERE |
||
CURDATE() | retourne la date en cours, comme CURRENT DATE | WHERE |
%DATE() | if datcde > %date(); |
CURTIME() | retourne l'heure en cours, comme CURRENT TIME | %TIME() | ||
NOW() | retourne le timestamp en cours | %TIMESTP() | ||
JULIAN_DAY(d) | retourne le nbr de jours qui sépare une date du 1er Janv. 4712 av JC. |
JULIAN_DAY(datcde) |
||
ADD_MONTHS(d, nbr) | ajoute
un nbr de mois à une date , si la date est au dernier jour du mois, la date calculée est aussi au dernier jour du mois |
ADD_MONTHS('2006-04-30' , 1) |
||
NEXT_DAY(d, 'day' ) | retourne le timestamp de la prochaine date ayant le jour demandé |
NEXT_DAYS('2006-12-31' , 'DIM') |
||
Test de la validité d'une zone caractère ou numérique contenant une date. | TEST(DE) | TEST(DE) datchar; if %error ; ..... endif; |
Fonctions liées aux heures
Fonction(x) | Retourne | Exemple | RPG |
TIME(T) | une heure | TIME( |
%TIME() |
HOUR(T) |
retourne la partie heure de T | HOUR(Pointage) |
%SUBDT(T:*H) |
MINUTE(D) | retourne la partie minute de T |
|
%SUBDT(T:*Mn) |
SECOND(T) | Retourne la partie secondes de T | %SUBDT(T:*S) | |
EXTRACT(hour from t) | la partie heure de T (aussi MINUTE et SECOND) |
EXTRACT(SECOND from pointage) |
|
Test de la validité d'une zone caractère ou numérique contenant une heure | TEST(TE) |
Fonctions liées aux Timestamp
Fonction(x) | Retourne | Exemple | RPG | ||||||||||
TIMESTAMP(T) | un timestamp (date - heure - microsecondes) | TIMESTAMP(' |
%TIMESTP() | ||||||||||
TIMESTAMP (D T) |
un timestamp (microsecondes à 0) | TIMESTAMP(datcde
heure) |
|||||||||||
TIMESTAMP_ISO(x)
|
un timestamp
à partier de x Si x est une date, l'heure est à 00:00:00 Si x est une heure, la date est à aujourd'hui. |
TIMESTAMP_ISO(heure_pointage) |
|||||||||||
TIMESTAMPDIFF (c 'DIFFERENCE') |
C indique l'unité de
mesure de l'écart que vous souhaitez obtenir
'DIFFERENCE' est la
représentation caractères [ CHAR(22) ] |
TIMLESTAMPDIFF(32 , |
|||||||||||
MIDNIGHT_SECONDS | retourne le nbr de secondes qui sépare un timestamp de minuit |
MIDNIGHT_SECONDS(pointage) |
* calcul de la fin de mois
|
* calcul du N° de semaine
|
dsemaine PR 2P 0 /free // si date recue < au lundi ==> premier lundi,année précédente // nombre de semaine entières |
Les mots-clé DATFMT [éventuellement DATSEP] sont admis sur les écrans (depuis la V4R2)
A LA SAISIE :
- les séparateurs ne sont PAS obligatoires ! - les zéros [à gauche] non plus
pour le 1er Février 2006 on admet avec DATFMT(*DMY) : 01/02/06
010206
10206
1/2/06
- on admet aussi DATFMT(*JOB) qui affiche (et accepte) une date au
format du job en cours(*DMY en France), mais transmet TOUJOURS en *ISO
Enfin, un nouveau mot-clé MAPVAL est implémenté afin d'établir des conversions
entre valeur affichée et valeur transmise au pgm.
MAPVAL( (valeur-pgm1 valeur-écran1)
(valeur-pgm2 valeur-écran2) ...) jusqu'à 100 correspondances
avec comme valeurs particulières :
*BLANK on affiche que des blancs *CUR valeur en cours (date en cours ou heure en cours)
exemple : MAPVAL(('01/01/40' *BLANK))
si le pgm contient 01/01/40 j'affiche des blancs
ET si l'utilisateur entre des blancs j'envoi 01/01/40