91 votes

Javascript horodatage en temps relatif

Je suis à la recherche d'un joli extrait de code JS pour convertir un horodatage (par exemple à partir de l'API Twitter) en un temps relatif convivial pour l'utilisateur (par exemple, il y a 2 secondes, il y a une semaine, etc).

Est-ce que quelqu'un serait prêt à partager certaines de ses méthodes préférées (de préférence sans utiliser de plugins) ?

0 votes

0voto

Bullsized Points 57

Voici une approche TypeScript. Je reçois une date du Back-End en tant que chaîne de caractères, d'où l'explication dans l'annotation. J'ai construit une fonction d'aide qui ressemble à ceci :

  /**
   * Une fonction qui calcule la différence de temps en secondes entre la date d'entrée (en chaîne de caractères) et la date actuelle
   * puis parcourt plusieurs intervalles de temps (année, mois, semaine, jour, heure et minute) pour trouver le plus approprié
   * pour la représentation du temps relatif.
   * Si la différence de temps est inférieure à une minute, cela renvoie "maintenant".
   * @param inputDateString - Date JS sous forme de chaîne de caractères, par exemple : `2023-06-30T11:19:49.259Z`
   */
  static getRelativeTimeFromDate(inputDateString: string): string {
    const inputDate = new Date(inputDateString);
    const currentDate = new Date();
    const timeDifferenceInSeconds = Math.floor((currentDate.getTime() - inputDate.getTime()) / 1000);

    const intervals = {
      year: 31536000,
      month: 2592000,
      week: 604800,
      day: 86400,
      hour: 3600,
      minute: 60,
    };

    for (const interval in intervals) {
      const numberOfUnits = Math.floor(timeDifferenceInSeconds / intervals[interval]);
      if (numberOfUnits >= 1) {
        return `${numberOfUnits} ${interval}${numberOfUnits > 1 ? 's' : ''} auparavant`;
      }
    }

    return 'maintenant';
  }

-1voto

Piyush P Points 160

Vous pouvez utiliser machinepack-datetime à cette fin. C'est facile et clair avec son API définie.

tutorialSchema.virtual('createdOn').get(function () {
    const DateTime = require('machinepack-datetime');
    let timeAgoString = "";
    try {
        timeAgoString = DateTime.timeFrom({
            toWhen: DateTime.parse({
                datetime: this.createdAt
            }).execSync(),
            fromWhen: new Date().getTime()
        }).execSync();
    } catch(err) {
        console.log('erreur lors de la récupération de createdon', err);
    }
    return timeAgoString; // il y a une seconde
});

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X