Aller au contenu

%MINUTES

Durée en minutes

Représente un nombre de minutes, à ajouter à une heure ou à un horodatage, ou à en retrancher.

Syntaxe

heure + %MINUTES(nombre)
horodatage - %MINUTES(nombre)
nombre
Le nombre de minutes : une constante, une zone numérique ou une expression. Un nombre négatif fait reculer.
Résultat
Une durée, à combiner avec une heure ou un horodatage par + ou -. Les minutes en trop se reportent sur les heures (90 minutes = 1 h 30). Le compilateur refuse la durée avec une date (RNF7584).

À quoi ça sert

Planifier des créneaux de rendez-vous, calculer un délai de rappel, fixer une durée de blocage : les durées courtes se manipulent naturellement en minutes. %MINUTES gère les reports sur les heures et, avec un horodatage, sur les jours.

Exemple 1 : Créneaux de consultation

**free
// %MINUTES : ajouter ou retirer des minutes (creneaux, delais courts).
ctl-opt dftactgrp(*no) actgrp(*new);

dcl-s rdv     time inz(t'09.00.00');
dcl-s creneau time;
dcl-s duree   int(10) inz(45);
dcl-s stamp   timestamp inz(z'2026-09-30-23.50.00.000000');
dcl-s i       int(10);

// Trois consultations de 45 minutes a la suite.
creneau = rdv;
for i = 1 to 3;
  snd-msg 'Consultation ' + %char(i) + ' : ' + %char(creneau : *hms) + ' -> ' +
          %char(creneau + %minutes(duree) : *hms);
  creneau = creneau + %minutes(duree);
endfor;

// Un delai de 90 minutes se convertit tout seul en heures et minutes.
snd-msg '09:00 + 90 min       : [' + %char(rdv + %minutes(90) : *hms) + ']';

// Sur un horodatage, le passage minuit change la date.
snd-msg 'Stamp + 20 min       : [' + %char(stamp + %minutes(20)) + ']';
snd-msg 'Stamp - 1440 min     : [' + %char(stamp - %minutes(1440)) + ']';

*inlr = *on;

Résultat réel, compilé et exécuté sur IBM i 7.5 :

Consultation 1 : 09:00:00 -> 09:45:00
Consultation 2 : 09:45:00 -> 10:30:00
Consultation 3 : 10:30:00 -> 11:15:00
09:00 + 90 min       : [10:30:00]
Stamp + 20 min       : [2026-10-01-00.10.00.000000]
Stamp - 1440 min     : [2026-09-29-23.50.00.000000]

Trois consultations de 45 minutes enchaînées à partir de 9 h : le début de chacune est la fin de la précédente. 90 minutes se reportent en 1 h 30. Sur un horodatage, 20 minutes après 23:50 nous emmènent au lendemain à 00:10 ; retrancher 1440 minutes recule d'un jour.

Exemple 2 : *M ou *MN ?

**free
// Attention aux unites : *M = mois, *MN = minutes (dans %SUBDT et %DIFF).
ctl-opt dftactgrp(*no) actgrp(*new);

dcl-s debut timestamp inz(z'2026-07-15-10.00.00.000000');
dcl-s fin   timestamp inz(z'2026-09-30-14.05.00.000000');

snd-msg 'Champ mois du stamp   : ' + %char(%subdt(fin : *months));
snd-msg 'Champ minutes         : ' + %char(%subdt(fin : *minutes));

// Abreviations : *M vaut mois, *MN vaut minutes.
snd-msg '%SUBDT(fin : *m)      : ' + %char(%subdt(fin : *m));
snd-msg '%SUBDT(fin : *mn)     : ' + %char(%subdt(fin : *mn));

snd-msg '%DIFF(... : *m)       : ' + %char(%diff(fin : debut : *m));
snd-msg '%DIFF(... : *mn)      : ' + %char(%diff(fin : debut : *mn));

// %MINUTES est bien la duree en minutes.
snd-msg 'debut + %MINUTES(125) : ' + %char(debut + %minutes(125));

*inlr = *on;

Résultat réel, compilé et exécuté sur IBM i 7.5 :

Champ mois du stamp   : 9
Champ minutes         : 5
%SUBDT(fin : *m)      : 9
%SUBDT(fin : *mn)     : 5
%DIFF(... : *m)       : 2
%DIFF(... : *mn)      : 111125
debut + %MINUTES(125) : 2026-07-15-12.05.00.000000

Le piège d'abréviation. Dans %SUBDT et %DIFF, *M désigne les mois (9 puis 2) et *MN les minutes (5 puis 111125). Écrire les noms complets *MONTHS et *MINUTES évite toute confusion.

Le piège

*M et *MN ne désignent pas la même unité. Dans %DIFF et %SUBDT, *M est le mois et *MN la minute. Une abréviation mal choisie compile sans problème et donne un résultat plausible mais faux (2 au lieu de 111 125). Préférer *MINUTES et *MONTHS.

Comme %HOURS, la fonction reboucle sur 24 heures avec une zone de type heure ; avec une date elle ne compile pas (RNF7584).