<p>moment().fromNow() "il y a quelques secondes"</p>

Créé le 6 déc. 2012  ·  19Commentaires  ·  Source: moment/moment

moment().fromNow() renvoie "il y a quelques secondes".
Pourquoi pas "juste maintenant" ?

New Feature

Commentaire le plus utile

Vous pouvez personnaliser cela en faisant quelque chose comme moment.langData('en').relativeTime.s = "just now" , bien que cela semblerait étrange avec un suffixe.

Si vous le souhaitez, vous pouvez créer une méthode qui enveloppe fromNow .

moment.fn.fromNowOrNow = function (a) {
    if (Math.abs(moment().diff(this)) < 1000) { // 1000 milliseconds
        return 'just now';
    }
    return this.fromNow(a);
}

Tous les 19 commentaires

Vous pouvez personnaliser cela en faisant quelque chose comme moment.langData('en').relativeTime.s = "just now" , bien que cela semblerait étrange avec un suffixe.

Si vous le souhaitez, vous pouvez créer une méthode qui enveloppe fromNow .

moment.fn.fromNowOrNow = function (a) {
    if (Math.abs(moment().diff(this)) < 1000) { // 1000 milliseconds
        return 'just now';
    }
    return this.fromNow(a);
}

Merci Tim !

Merci pour le code. Je suis d'accord avec "il y a quelques secondes", mais j'obtiens souvent aussi "en quelques secondes" après avoir terminé une opération car les horloges du serveur et du client ne sont pas synchronisées. Alors je me demande si ça n'aurait pas de sens d'afficher "juste maintenant" dans les deux cas ?

Oui, le code ci-dessus indique "just now" si c'est 1 seconde avant ou après l'heure actuelle, donc si vous souhaitez augmenter cette plage, vous pouvez simplement modifier le nombre de millisecondes.

moment.fn.fromNowOrNow = function (a) {
    if (Math.abs(moment().diff(this)) < 25000) { // 25 seconds before or after now
        return 'just now';
    }
    return this.fromNow(a);
}

Merci, j'ai compris, mais je me demandais s'il serait logique que "tout à l'heure" soit le comportement par défaut, étant donné que voir "en quelques secondes" pour un événement passé ressemble à un bogue pour la plupart des utilisateurs.

+1 pour "tout à l'heure" comme comportement par défaut !

Eh bien, si vos horloges ne sont pas synchronisées, vous avez un problème. Je ne pense pas que le bon endroit pour le réparer soit la méthode d'humanisation du moment. C'est une bibliothèque de temps, vous lui dites d'afficher une heure dans le futur, et il le fait.

Si vous voulez changer la chaîne "il y a quelques secondes" par "tout à l'heure", mais laisser "dans quelques secondes", c'est une autre chose. Cela nécessitera également un correctif de toutes les traductions ;-)

moment.langData('fr').relativeTime.s = "jamais"; était la correction pour mon problème # 555

Merci Tim !

Les horloges seront presque toujours un peu désynchronisées lors de l'analyse des horodatages générés par le serveur dans un navigateur. Est-ce un cas d'utilisation rare pour moment.js ?

Je pense que l'ajout d'une valeur epsilon de quelques secondes, de sorte que des intervalles plus petits que cela dans n'importe quelle direction produiraient "juste maintenant" ou similaire, et si cette valeur est facilement modifiable, elle peut répondre aux attentes de tout le monde - la valeur 0 signifie le comportement actuel , une valeur supérieure à zéro sert à lutter contre le décalage navigateur/serveur ou similaire.

Qu'est-ce que tu penses?

Une "valeur epsilon" configurable semble être une bonne idée.

Je pense qu'une solution plus simple au problème de @ejain consiste à

var now = moment();
var mom = momentFromServer < now ? now : momentFromServer;
mom.fromNow(); //=> a few seconds ago

Si cela doit faire partie de Moment, ma suggestion est simplement d'en faire un argument booléen à fromNow() . Ou mieux encore, laissez fromNow prendre un objet option (compatible inversement), comme fromNow({withSuffix: false, forcePast: true}) .

@icambron : excellente solution, si vous pouvez être sûr de ne pas avoir de moments futurs valables.

@timrwood merci pour vos conseils

c'est en fait moment.langData('en')._relativeTime.s = "just now" si vous voulez remplacer cette chaîne.

J'humanise les dates (sans information sur l'heure), donc changer _relativeTime.s en l'équivalent de "aujourd'hui" pour tous les paramètres régionaux était ma solution.

fromNow(true) renvoie "il y a 2 minutes", "il y a 2 heures", "il y a quelques secondes".
Comment pouvez-vous faire quelque chose comme "2m" ou "2h" ou "2s" ou "2d" ?.

@puneet94 Vous pouvez mettre à jour vos chaînes de paramètres régionaux avec https://momentjs.com/docs/#/customization/relative -time/

FWIW, j'ai pu appliquer "just now" en utilisant 2.12.0 en spécifiant une fonction pour past :

moment.updateLocale('en', {
    relativeTime : {
        past: function(input) {
          return input === 'just now'
            ? input
            : input + ' ago'
        },
        s  : 'just now',
        future: "in %s",
        ss : '%d seconds',
        m:  "a minute",
        mm: "%d minutes",
        h:  "an hour",
        hh: "%d hours",
        d:  "a day",
        dd: "%d days",
        M:  "a month",
        MM: "%d months",
        y:  "a year",
        yy: "%d years"
    }
});

@richardszalay quel format de date utilisez-vous avec cela et comment l'appliquez-vous ?
J'ai une chaîne de date time = 1560955417474,
et souhaitez l'afficher dans une balise de texte
<Text>{time}</Text>

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

dushkostanoeski picture dushkostanoeski  ·  23Commentaires

fernandoacorreia picture fernandoacorreia  ·  31Commentaires

gayankasun picture gayankasun  ·  47Commentaires

FGRibreau picture FGRibreau  ·  112Commentaires

cristianstaicu picture cristianstaicu  ·  24Commentaires