Angular & Microsoft Graph [Part 7] : Astuce, les dates avec Microsoft Graph

Si vous allez dans la documentation de Microsoft Graph sur les évènements d'un calendrier, vous verrez que le type des dates de début/fin est un microsoft.graph.dateTimeTimeZone. Arg: Kézako ?

Un DateTimeTimeZone comme son nom l'indique contient 2 informations (de type string) qui sont :

  • le dateTime qui est une représentation "simple" de la date avec l'heure,
  • le timeZone qui est le nom de la time Zone comme par exemple America/Chihuahua ou Europe/Paris.

(la doc de DateTimeTimeZone qui contient la liste de TimeZone).

Donc par exemple je peux recevoir de l'api au format JSON l'event avec les propriétés suivante :

            "start": {
                "dateTime": "2018-08-01T09:00:00.0000000",
                "timeZone": "Europe/Paris"
            },
            "end": {
                "dateTime": "2018-08-01T12:30:00.0000000",
                "timeZone": "Europe/Paris"
            },

J'ai ici un rendez-vous qui a eu lieu le 1er Aout 2018 à 9h du matin, heure de Paris.

Côté Typescript/Javascript, il faut bien pouvour travailler avec une vraie représentation de type Date.

Le mieux que j'ai trouvé (mais si vous avez d'autres solutions sans dépendances, je suis preneur), c'est d'utiliser le célèbre momentjs ou plus exactement Moment TimeZone. Et donc, dès que vous recevez un objet de type DateTimeTimeZone, pour travaillez avec lui en tant que Date (ou plus exactement Moment), la transformation est aisée :

import * as moment from 'moment-timezone';

const mStartTime = moment.tz(dtTz.start.dateTime, dtTz.start.timeZone);
const dStartTime = mStartTime.toDate();

Donc même si vous recevez un évènement dont le time zone est America/Chihuahua vous pourrez l'exploiter correctement. (c'est quoi déjà le décalage horaire entre Chihuahua et Bayonne ?

blog comments powered by Disqus