Time zone changes

Overview

We will change the format for date and time fields in the near future. All clients that use /connect/v1/trialsession to book trial sessions are forced to change their implementation to reflect those upcoming changes. Please find all details regarding the necessary changes on this page.

The here described changes are backwards-compatible. We encourage you to change your implementation immediately to be safe once the format for date and time has been changed.

Currently we return date and time of slots in the following format: 2021-08-23T09:00:00.000Z
Date and time of slots are returned in UTC. The browser will then convert to the local time zone of the user. Selected slots are sent in the same format back to the API.

In the near future we will return date and time with the correct time zone in a new format: 2021-08-23T11:00:00.000+02:00[Europe/Berlin]
Date and time can be displayed directly and no longer have to be converted. Use the same format to send the selected slot back to the API.

A code snippet on how to handle both formats in a backwards-compatible way can be found below, which is also used in this demo application. The demo tenant connectdemo already switched to the new format and can be used to test your own solution.

Code snippet

Makes use of Moment.js

function formatDate(dateString) {
        if (dateString.endsWith(']')) {
            // upcoming format: date and time string is in correct time zone and needs just to be formatted to present it
            // time zone information will be just removed before
            const dateWithOutTimeZone = dateString.replace(/\[.*\]/, '');
            return moment.parseZone(dateWithOutTimeZone).format('YYYY-MM-DD HH:mm');
        } else {
            // deprecated format: date and time string is in UTC and needs to be converted into the time zone of the browser
            const clientsTimeZone = moment.tz.guess();
            return moment(dateString).tz(clientsTimeZone).format('YYYY-MM-DD HH:mm')
        }
    }

Difference from old to new format

Old format

GET https://connectdemo.api.magicline.com/connect/v1/trialsession?startDate=2021-08-23&endDate=2021-08-29&studioId=1210007620

{
  "name": "Probetraining",
  "description": "Probetraining in unserem Studio!",
  "bookingWithoutResourcesAllowed": false,
  "slots": [
    {
      "startDateTime": "2021-08-26T08:00:00.000Z",
      "endDateTime": "2021-08-26T09:00:00.000Z"
    },
    {
      "startDateTime": "2021-08-26T09:00:00.000Z",
      "endDateTime": "2021-08-26T10:00:00.000Z"
    },
    ....
  ]
}

POST https://connectdemo.api.magicline.com/connect/v1/trialsession/book

{
 {
  "leadCustomer": {
    "address": {
      "city": "",
      "houseNumber": "",
      "country": "DE",
      "street": "",
      "zip": ""
    },
    "dateOfBirth": "2000-01-01",
    "email": "",
    "firstname": "John",
    "gender": "MALE",
    "lastname": "Smith",
    "secondLastname": "",
    "phone": ""
  },
  "startDateTime": "2021-08-26T08:00:00.000Z",
  "studioId": 1210007620,
  "note": "",
  "referrerId": null,
  "trainerRequired": true,
  "sourceCampaignId": ""
}

New format

GET https://connectdemo.api.magicline.com/connect/v1/trialsession?startDate=2021-08-23&endDate=2021-08-29&studioId=1210007620

{
  "name": "Probetraining",
  "description": "Probetraining in unserem Studio!",
  "bookingWithoutResourcesAllowed": false,
  "slots": [
    {
      "startDateTime": "2021-08-26T10:00:00.000+02:00[Europe/Berlin]",
      "endDateTime": "2021-08-26T11:00:00.000+02:00[Europe/Berlin]"
    },
    {
      "startDateTime": "2021-08-26T11:00:00.000+02:00[Europe/Berlin]",
      "endDateTime": "2021-08-26T12:00:00.000+02:00[Europe/Berlin]"
    },
    ....
  ]
}

POST https://connectdemo.api.magicline.com/connect/v1/trialsession/book

{
 {
  "leadCustomer": {
    "address": {
      "city": "",
      "houseNumber": "",
      "country": "DE",
      "street": "",
      "zip": ""
    },
    "dateOfBirth": "2000-01-01",
    "email": "",
    "firstname": "John",
    "gender": "MALE",
    "lastname": "Smith",
    "secondLastname": "",
    "phone": ""
  },
  "startDateTime": "2021-08-26T10:00:00.000+02:00[Europe/Berlin]",
  "studioId": 1210007620,
  "note": "",
  "referrerId": null,
  "trainerRequired": true,
  "sourceCampaignId": ""
}