freeCodeCamp/curriculum/challenges/italian/05-back-end-development-and.../back-end-development-and-ap.../timestamp-microservice.md

4.5 KiB

id title challengeType forumTopicId dashedName
bd7158d8c443edefaeb5bdef Microservizio Timestamp 4 301508 timestamp-microservice

--description--

Costruisci un'app JavaScript full-stack che sia funzionalmente simile a questa: https://timestamp-microservice.freecodecamp.rocks/. Lavorare su questo progetto ti porterà a scrivere il tuo codice utilizzando uno dei seguenti metodi:

Quando hai finito, assicurati che una demo funzionante del tuo progetto sia ospitata in qualche percorso pubblico. Quindi invia l'URL nel campo Solution Link. Facoltativamente, invia anche un link al codice sorgente del tuo progetto nel campo GitHub Link.

Nota: la conversione tra fusi orari non è un proposito di questo progetto, quindi assumi che tutte le date valide saranno passate a new Date() come date GMT.

--hints--

È necessario fornire il proprio progetto, non l'URL di esempio.

(getUserInput) => {
  assert(
    !/.*\/timestamp-microservice\.freecodecamp\.rocks/.test(getUserInput('url'))
  );
};

Una richiesta a /api/:date? con una data valida dovrebbe restituire un oggetto JSON con una chiave unix che è il tempo Unix in millisecondi della data di input

(getUserInput) =>
  $.get(getUserInput('url') + '/api/2016-12-25').then(
    (data) => {
      assert.equal(
        data.unix,
        1482624000000,
        'Should be a valid unix timestamp'
      );
    },
    (xhr) => {
      throw new Error(xhr.responseText);
    }
  );

Una richiesta a /api/:date? con una data valida dovrebbe restituire un oggetto JSON con una chiave utc che è una stringa della data di immissione nel formato: Thu, 01 Jan 1970 00:00:00 GMT

(getUserInput) =>
  $.get(getUserInput('url') + '/api/2016-12-25').then(
    (data) => {
      assert.equal(
        data.utc,
        'Sun, 25 Dec 2016 00:00:00 GMT',
        'Should be a valid UTC date string'
      );
    },
    (xhr) => {
      throw new Error(xhr.responseText);
    }
  );

Una richiesta a /api/1451001600000 dovrebbe restituire { unix: 1451001600000, utc: "Fri, 25 Dec 2015 00:00:00 GMT" }

(getUserInput) =>
  $.get(getUserInput('url') + '/api/1451001600000').then(
    (data) => {
      assert(
        data.unix === 1451001600000 &&
          data.utc === 'Fri, 25 Dec 2015 00:00:00 GMT'
      );
    },
    (xhr) => {
      throw new Error(xhr.responseText);
    }
  );

Il tuo progetto può gestire date che possono essere lette con successo da new Date(date_string)

(getUserInput) =>
  $.get(getUserInput('url') + '/api/05 October 2011, GMT').then(
    (data) => {
      assert(
        data.unix === 1317772800000 &&
          data.utc === 'Wed, 05 Oct 2011 00:00:00 GMT'
      );
    },
    (xhr) => {
      throw new Error(xhr.responseText);
    }
  );

Se la stringa della data di input non è valida, l'api restituisce un oggetto con la struttura { error : "Invalid Date" }

(getUserInput) =>
  $.get(getUserInput('url') + '/api/this-is-not-a-date').then(
    (data) => {
      assert.equal(data.error.toLowerCase(), 'invalid date');
    },
    (xhr) => {
      assert(xhr.responseJSON.error.toLowerCase() === 'invalid date');
    }
  );

Un parametro data vuoto dovrebbe restituire l'ora corrente in un oggetto JSON con una chiave unix

(getUserInput) =>
  $.get(getUserInput('url') + '/api').then(
    (data) => {
      var now = Date.now();
      assert.approximately(data.unix, now, 20000);
    },
    (xhr) => {
      throw new Error(xhr.responseText);
    }
  );

Un parametro data vuoto dovrebbe restituire l'ora corrente in un oggetto JSON con una chiave utc

(getUserInput) =>
  $.get(getUserInput('url') + '/api').then(
    (data) => {
      var now = Date.now();
      var serverTime = new Date(data.utc).getTime();
      assert.approximately(serverTime, now, 20000);
    },
    (xhr) => {
      throw new Error(xhr.responseText);
    }
  );

--solutions--

/**
  Backend challenges don't need solutions, 
  because they would need to be tested against a full working project. 
  Please check our contributing guidelines to learn more.
*/