Suivez votre progression
Accueil Trailhead
Accueil Trailhead

Utilisation des formules de type Date, Date/Heure et Heure

Objectifs de formation

Une fois cette unité terminée, vous pourrez :
  • Décrire ce que sont les types Date, Date/Heure et Heure
  • Expliquer la différence entre les types Date, Date/Heure et Heure
  • Décrire dans quels cas les formules avec les types de renvoi Date, Date/Heure et Heure sont utilisées
  • Créer une formule qui emploie les types Date, Date/Heure et Heure

Présentation des formules de date, de date/heure et d’heure

Dans le cadre de la gestion de votre organisation, les champs Date et Date/Heure sont des outils efficaces pour afficher la date de naissance d’un contact, l’ancienneté d’une requête ou encore la date et l’heure de création d’un compte. Les champs d’heure, eux, sont parfaits pour réaliser le suivi d’heures effectives, par exemple les heures ouvrables. Vous pouvez utiliser une formule pour afficher la date ou l’heure actuelle ou pour trouver l’écart entre deux dates ou heures.

Cette formule interobjets, par exemple, affiche la date et l’heure de la création d’un compte sur la page de la requête lui étant associée en tant que valeur de date/heure.
Account.CreatedDate

Une formule interobjets affiche les données d’un objet sur un autre objet. Ici, nous affichons sur l’objet de requête la date de création de l’objet de compte, représentée par CreatedDate. Les membres de votre organisation peuvent voir une formule qui affiche ou fait référence à un champ interobjet même s’ils n’ont pas accès à l’objet sur lequel se trouve le champ. Pour en savoir plus sur les formules interobjets, consultez l’article d’aide Conseils relatifs à la création de formules interobjets.

Une date est représentée sous la forme d’une valeur de date ou de date/heure. Une valeur de date stocke une année, un mois et un jour. Une valeur de date/heure, elle, stocke une année, un mois, un jour et une heure. L’heure est enregistrée dans le fuseau horaire GMT, mais s’affiche dans le fuseau horaire de l’utilisateur qui la visualise. Il est important de rester vigilant vis-à-vis des conflits de fuseaux horaires lorsque vous manipulez des valeurs de date/heure dans des formules. Le fait de confondre plusieurs fuseaux horaires peut facilement entraîner des erreurs logiques dans vos champs de formule et la diffusion d’informations erronées dans votre organisation.

Si vous réalisez une soustraction entre deux valeurs de date, le résultat sera un nombre entier. Si vous réalisez une soustraction entre deux valeurs de date/heure, le résultat se présentera sous la forme d’une valeur décimale représentant le nombre de jours, d’heures et de minutes. Par exemple, si la différence entre deux valeurs de type Date/Heure est de 3,52, cela signifie qu’il y a un écart de 3 jours, 12 heures (0,5 journée) et 29 minutes (0,02 journée) entre les deux dates.

Remarque

Remarque

Une valeur d’heure stocke des heures, des minutes, des secondes et des millisecondes (sous le format HH:MM:SS.MS). Notez bien que les millisecondes sont précédées d’un point (.), et non d’un signe deux points (:). Une valeur d’heure est semblable à une valeur de date/heure, mais ne contient pas de date. Cependant, les valeurs d’heure ont une précision de l’ordre de la milliseconde. Les valeurs de date/heure, elles, n’ont qu’une précision de l’ordre de la seconde.

Si vous réalisez une soustraction entre deux valeurs d’heure, le résultat sera exprimé en millisecondes et sera toujours positif.

Ici, TimeField1__c a pour valeur 22 h 00 et TimeField2__c a pour valeur 21 h 00 :

TimeField1__c - TimeField2__c = 3600000

Le résultat ne peut pas être un nombre négatif. La soustraction représente le temps écoulé entre deux valeurs d’heure, mesurées sur 24 heures.

Fonctions et opérateurs Date, Date/Heure et Heure courants

Salesforce propose plusieurs fonctions qui vous permettent de manipuler plus facilement les valeurs de date, de date/heure et d’heure. Vous pouvez convertir en date une valeur Date/Heure à l’aide de la fonction DATEVALUE(), qui renvoie une date à partir d’une valeur Date/Heure ou Texte. De même, DATETIMEVALUE() renvoie une valeur Date/Heure à partir d’une valeur Date ou Texte, en définissant l’heure sur minuit GMT. Vous pouvez également convertir les valeurs Date/Heure ou Texte en valeurs Heure à l’aide de la fonction TIMEVALUE().

Supposons que vous souhaitiez qu’un champ de formule personnalisé affiche la date du 17 mars 2015. Vous pouvez utiliser la fonction DATE() pour convertir un jour, un mois et une année en valeur Date (celle que vous souhaitez).
DATE(2015, 03, 17)
L’utilisation de DATETIMEVALUE() est une autre méthode pour convertir du texte en une valeur Date/Heure correspondant au 17 mars 2015 à 17 h 00 GMT.
DATETIMEVALUE("2015-03-17 17:00:00")
Vous pouvez également utiliser DATEVALUE(), qui renvoie une valeur Date à partir d’une chaîne.
DATEVALUE("2015-03-17")
Remarque

Remarque

DATETIMEVALUE() utilise une valeur Date ou Texte au format AAAA-MM-JJ et une heure dans le fuseau horaire GMT. Si vous saisissez une valeur n’appartenant pas à la plage valide, telle que le 29 février lors d’une année non bissextile ou un mois supérieur à 12, votre champ de formule affichera #Error!

Pour obtenir le jour actuel sous la forme d’une valeur Date, utilisez TODAY(). Pour obtenir le moment présent sous la forme d’une valeur Date/Heure, utilisez NOW(). Ces fonctions sont utiles pour connaître des dates dans le futur ou le passé, ou encore le nombre de jours séparant une date donnée d’aujourd’hui.

Pour obtenir uniquement le jour, le mois ou l’année d’une valeur Date sous forme de nombre, utilisez respectivement DAY(), MONTH() ou YEAR().

Dans les champs d’heure, la fonction TIMEVALUE() s’utilise de la même manière que DATEVALUE(). Supposons que vous souhaitez définir la valeur par défaut d’un champ d’heure sur 17 h 30. Utilisez le format de date international (ISO) dans une formule correspondant à la valeur par défaut du champ.
TIMEVALUE("17:30:00.000")
Pour obtenir l’heure actuelle, utilisez la fonction TIMENOW(). Les fonctions HOUR(), MINUTE(), SECONDS() et MILLISECONDS() sont également à votre disposition. Par exemple, si vous devez suivre les minutes lors de l’utilisation d’un minuteur, utilisez à la fois TIMENOW() et MINUTE() pour obtenir uniquement les minutes de l’heure actuelle.
MINUTE(TIMENOW())

Utilisation des types Date, Date/Heure et Heure dans les formules

L’une des utilisations les plus simples des valeurs de date consiste en la recherche du nombre de jours entre deux dates. Lorsque vous soustrayez une valeur de date à une autre, vous obtenez un nombre représentant le nombre de jours d’écart entre ces dates.

Par exemple, si vous voulez savoir combien de jours il y a entre la date du jour actuel et la date de création d’un compte, représentée par CreatedDate, utilisez :
TODAY() - DATEVALUE(CreatedDate)
Remarque

Remarque

Veillez à ne soustraire d’une date donnée que des dates lui étant antérieures. Si vous inversiez la formule de cette manière, DATEVALUE(CreatedDate) - TODAY(), vous obtiendriez une valeur négative.

Vous remarquerez que nous avons utilisé DATEVALUE() pour convertir CreatedDate, une valeur Date/Heure, en une valeur Date, ce qui nous permet de soustraire CreatedDate à TODAY(). Il est impossible de réaliser des opérations entre des valeurs de date et de date/heure. Vous ne pouvez pas soustraire une valeur de date à une valeur de date/heure, ou une valeur de date/heure à une valeur de date, sans convertir l’une des valeurs au préalable.

Vous pouvez également ajouter des jours à une valeur de date. Pour créer une formule qui renvoie la date qu’il sera dans trois jours, procédez ainsi :

  1. Dans Configuration, accédez à Gestionnaire d’objet via la case Recherche rapide.
  2. Cliquez sur Compte | Champs et relations, puis sur Nouveau.
  3. Sélectionnez Formule, puis cliquez sur Suivant.
  4. Dans Étiquette du champ, saisissez Date future. La section Nom du champ est automatiquement renseignée.
  5. Sélectionnez Date, puis cliquez sur Suivant.
  6. Saisissez la formule suivante :
    TODAY() + 3
    Remarque Lorsque vous ajoutez des jours à une date, Salesforce ignore les décimales. Par conséquent, TODAY() + 3 équivaut à TODAY + 3.4 et TODAY() + 2 équivaut à TODAY() + 2.9.

Simple, non ? Les choses deviennent un peu plus complexes lorsque l’on souhaite ajouter des jours ouvrables à une date. Pour cette formule, nous utiliserons la fonction CASE() afin d’ajouter 3 jours ouvrables à TODAY(). À certains égards, CASE() ressemble à IF(). La principale différence, c’est que IF() vérifie une seule instruction logique, tandis que CASE() passe en revue une série d’instructions, appelées requêtes.

CASE(expression, cas1, résultat1, cas2, résultat2,… , sinon_resultat) est une fonction comparant l’élément expression à la requête1. S’ils sont égaux, elle renvoie résultat1. Si ce n’est pas le cas, elle compare expression à requête2, et ainsi de suite. Si l’élément « expression » ne correspond à aucune requête, l’instruction renvoie le résultat correspondant à sinon_resultat.

La fonction CASE() est utile lorsque des instructions conditionnelles ont de nombreux résultats possibles. Même si vous parvenez généralement aux mêmes résultats avec des instructions IF() imbriquées, l’emploi de CASE() facilite la lecture et la compréhension de formules complexes.

Nous allons utiliser CASE() pour écrire une formule qui ajoute 3 jours ouvrables à TODAY(), c’est-à-dire aujourd’hui. Lorsque vous travaillez avec CASE(), vous devez tout d’abord réfléchir aux différentes requêtes pouvant se présenter. Notre formule pourrait en effet rencontrer plusieurs situations différentes :

  • Si TODAY() est un dimanche, lundi ou mardi, l’ajout de 3 jours ouvrables revient à calculer TODAY() + 3.
  • Si TODAY() est un mercredi, jeudi ou vendredi, ajouter 3 jours ouvrables équivaut à effectuer l’opération TODAY() + 5 (ajout de 3 jours ouvrables et de 2 jours de week-end).
  • Si TODAY() est un samedi, l’ajout de 3 jours ouvrables équivaut à effectuer l’opération TODAY() + 4 (ajout de 3 jours ouvrables + 1 jour de week-end).

Pour que notre formule fonctionne, nous devons donc savoir à quel jour de la semaine correspond TODAY(). Utilisez la fonction WEEKDAY() pour rechercher le jour de la semaine.

Notre instruction CASE() déterminera ensuite le résultat en fonction du jour de la semaine auquel correspond TODAY(). Voici à quoi ressemble notre formule finale :
CASE(
  WEEKDAY(TODAY()),
  3, TODAY() + 2 + 3,
  4, TODAY() + 2 + 3,
  5, TODAY() + 2 + 3,
  6, TODAY() + 1 + 3,
  TODAY() + 3
)

Vous pouvez adapter cette formule pour ajouter le nombre de jours ouvrables de votre choix à une date donnée. Quel que soit le nombre de jours ouvrables que vous ajoutez, il y aura au maximum sept cas, à savoir un pour chaque jour de la semaine.

Vous pouvez également effectuer des opérations mathématiques portant sur des valeurs d’heure.

L’unité dans laquelle les valeurs d’heure sont ajoutées ou soustraites est la milliseconde.

Ainsi, lorsque Timefield1__c a pour valeur 17 h 00 :

  • Timefield1__c + 600000 correspond à 17 h 10
  • Timefield1__c - 600000 à correspond à 16 h 50

Les champs d’heure ne contiennent pas de date. Ainsi, ajouter 25 heures à une valeur d’heure revient à lui ajouter 1 heure, l’horloge revenant à son point de départ au bout de 24 heures.

N’oubliez pas : comme il est possible de soustraire un champ d’heure à un autre dans une formule, le résultat est exprimé en millisecondes et n’est jamais un nombre négatif.

Par exemple, vous pouvez utiliser la formule suivante pour calculer le nombre d’heures d’ouverture d’une entreprise :
(ClosedTime - OpenTime) / 3600000

Vous obtenez les résultats suivants pour les horaires indiqués ci-dessous :

Avec ClosedTime = 17 h 00 (heure de fermeture) et OpenTime = 8 h 00 (heure d’ouverture), ClosedTime - OpenTime équivaut à 9 heures d’ouverture.

Avec ClosedTime = 5 h 00 (heure de fermeture) et OpenTime = 7 h 00 (heure d’ouverture), ClosedTime - OpenTime équivaut à 22 heures d’ouverture.

Vous pouvez également configurer des règles de validation temporelles. Ainsi, la formule suivante vérifie qu’une période de travail dure au moins 4 heures.
Shift_Ends_Time__c <= (Shift_Start_Time__c + 14400000) 

Exemples autour des types Date, Date/Heure et Heure

  1. Cette formule permet d’identifier le dernier jour d’un mois en soustrayant un jour au premier jour du mois suivant. Avant de réaliser la soustraction, elle utilise la fonction ADDMONTHS() afin de trouver par calcul chacun des mois suivants.
    DATE(YEAR(ADDMONTHS(Date__c,1)), MONTH(ADDMONTHS(Date__c,1)), 1) - 1
  2. Cette formule recherche le nombre de jours ouvrables entre aujourd’hui, représenté par TODAY(), et une date antérieure, représentée par Date__c. La formule commence par rechercher le nombre de jours ouvrables entre TODAY() et un lundi passé dont on connaît la date, en l’occurrence le 8 janvier 1900. Pour convertir ce nombre de jours en semaines, nous le divisons par 7 et utilisons FLOOR(). Ensuite, pour convertir ce nombre de semaines en jours ouvrables, nous le multiplions par 5. La formule calcule alors la différence entre ce nombre et le nombre de jours ouvrables s’étant écoulés entre Date__c et le même lundi de référence. Le résultat est le nombre de jours ouvrables entre TODAY() et la date antérieure, Date__c.
    (5 * (FLOOR((TODAY() - DATE(1900, 1, 8)) / 7)) + MIN(5, MOD(TODAY() - DATE(1900, 1, 8), 7)))
    -
    (5 * (FLOOR((Date__c - DATE(1900, 1, 8)) / 7)) + MIN(5, MOD(Date__c - DATE(1900, 1, 8), 7 )))
  3. Cette formule ajoute Num_Years__c à Date__c. Elle utilise ADDMONTHS(), qui gère automatiquement les années bissextiles. Remarque ADDMONTHS() tient compte du dernier jour du mois lors de l’exécution d’opérations mathématiques. Ainsi, lorsque vous ajoutez un mois à une date qui est le 30 et également le dernier jour du mois correspondant, le résultat est le dernier jour du mois suivant, qui peut donc être le 31. De même, ajouter un mois au 28 février (lors d’une année non bissextile) donnera comme résultat le 31 mars.
    ADDMONTHS(Date__c, Num_Years__c * 12)
  4. Cette formule s’appliquant aux requêtes vérifie si les représentants appellent les clients à l’heure où ils souhaitent être contactés. Sur les requêtes sortantes, le champ Heure souhaitée indique l’heure à laquelle un contact a indiqué qu’il préférait être contacté.
    IF(
      IF((HOUR(TIMEVALUE(CreatedDate)) - 7) < 0,
        24 + (HOUR(TIMEVALUE(CreatedDate)) -7),
        (HOUR(TIMEVALUE(CreatedDate)) - 7))
    = HOUR(Contact.Preferred_Time__c), TRUE, FALSE)

Erreurs courantes avec les formules de type Date, Date/Heure et Heure

  • Conversion entre des données de type Date, Date/Heure et Heure Les types de données Date, Date/Heure et Heure ne sont pas interchangeables. Si une formule est conçue pour renvoyer une valeur de date/heure, si son type de renvoi est Date, elle ne fonctionnera pas. Pour réaliser des conversions entre des données de type Date, Date/Heure et Heure, utilisez les fonctions intégrées DATEVALUE(), DATETIMEVALUE() et TIMEVALUE(). N’oubliez pas que TODAY() renvoie la date actuelle sous la forme d’une valeur Date, tandis que NOW() renvoie la date et l’heure actuelles sous la forme d’une valeur Date/Heure. Enfin, TIMENOW() renvoie la date et l’heure actuelles sous la forme d’une valeur Heure.
  • Utilisation des fuseaux horaires Les valeurs de date, de date/heure et d’heure sont toujours affichées en fonction du fuseau horaire de l’utilisateur qui les consulte. Les valeurs de date/heure sont converties et enregistrées dans le fuseau horaire GMT lorsqu’un enregistrement est sauvegardé, puis converties à nouveau lorsqu’un utilisateur situé hors de ce fuseau horaire les consulte. Lorsque vous convertissez une valeur de date en une valeur de date/heure, l’heure figurant dans la valeur convertie sera toujours minuit GMT. Tenez compte des fuseaux horaires lors de la conversion d’une valeur Date/Heure à l’aide de TEXT(). Lorsque vous convertissez une valeur Date/Heure en texte, l’heure est renvoyée avec le fuseau horaire GMT, comme l’indique la présence d’un Z à la fin de la valeur. TEXT() génère toujours une valeur Texte présentant l’heure dans le fuseau horaire GMT, et non dans le fuseau horaire de votre organisation. Les valeurs d’heure n’ont pas de paramètres régionaux ni de fuseaux horaires associés et ne sont pas converties si des utilisateurs dans des fuseaux horaires différents les consultent. Lorsque vous convertissez une valeur Date/Heure en valeur Heure à l’aide de TIMEVALUE(), la valeur renvoyée correspondra à l’heure dans le fuseau horaire GMT.
  • Années bissextiles et dates invalides Lorsque vous convertissez du texte en valeurs de date ou de date/heure ou que vous ajoutez des années, des mois ou des jours à une valeur de date ou de date/heure, assurez-vous que votre résultat est toujours une date valide. Par exemple, si votre formule a pour résultat « 31 juin 2015 », le champ de formule affichera #Error! De même, si votre formule renvoie « 29 février 2013 » (2013 étant une année non bissextile), le champ affichera une erreur. Assurez-vous que vos formules tiennent compte des années bissextiles et des durées variables des mois.