Moment: <moment minutes="" ago="">.from(moment()) // gibt 'vor einer Stunde' zurück</moment>

Erstellt am 7. Okt. 2014  ·  4Kommentare  ·  Quelle: moment/moment

Danke für die tolle Bibliothek.

Ein Problem, auf das ich gestoßen bin, ist, dass from() Dauern >= 45 Minuten bis zu einer Stunde rundet. Andere Einheiten (Sekunden, Tage etc.) werden ebenfalls gerundet. In unserer Bewerbung möchten wir etwas genauer sein. Ich glaube, dass die unten aufgeführte Funktion die Rundung übernimmt. Was wäre eine geeignete Lösung, um Rundungen optional zu entfernen? Vielen Dank!

    function relativeTime(milliseconds, withoutSuffix, lang) {
        var seconds = round(Math.abs(milliseconds) / 1000),
            minutes = round(seconds / 60),
            hours = round(minutes / 60),
            days = round(hours / 24),
            years = round(days / 365),
            args = seconds < 45 && ['s', seconds] ||
                minutes === 1 && ['m'] ||
                minutes < 45 && ['mm', minutes] ||
                hours === 1 && ['h'] ||
                hours < 22 && ['hh', hours] ||
                days === 1 && ['d'] ||
                days <= 25 && ['dd', days] ||
                days <= 45 && ['M'] ||
                days < 345 && ['MM', round(days / 30)] ||
                years === 1 && ['y'] || ['yy', years];
        args[2] = withoutSuffix;
        args[3] = milliseconds > 0;
        args[4] = lang;
        return substituteTimeAgo.apply({}, args);
    }

Hilfreichster Kommentar

Sie können den gewünschten Zeitschwellenwert festlegen, wie hier in der Dokumentation beschrieben .

Wenn Sie immer die Vollzeit anzeigen möchten, können Sie Ihre Schwellenwerte genauer festlegen:

// Set thresholds to be at their "max" value
moment.relativeTimeThreshold('s', 59);
moment.relativeTimeThreshold('m', 59);
moment.relativeTimeThreshold('h', 23);
moment.relativeTimeThreshold('d', 28);
moment.relativeTimeThreshold('M', 12);

Alle 4 Kommentare

Konkret kann dies ausgeführt werden, um das Problem zu veranschaulichen:

moment().subtract(45, 'minutes').from(moment())

Sie können den gewünschten Zeitschwellenwert festlegen, wie hier in der Dokumentation beschrieben .

Wenn Sie immer die Vollzeit anzeigen möchten, können Sie Ihre Schwellenwerte genauer festlegen:

// Set thresholds to be at their "max" value
moment.relativeTimeThreshold('s', 59);
moment.relativeTimeThreshold('m', 59);
moment.relativeTimeThreshold('h', 23);
moment.relativeTimeThreshold('d', 28);
moment.relativeTimeThreshold('M', 12);

Vielen Dank. Gibt es eine Möglichkeit, eine Dauer von 75 Minuten als "eine Stunde und 15 Minuten" anstatt als "eine Stunde" anzuzeigen? Dieselbe Frage für 90 Minuten -> '2 Stunden'.

Idealerweise möchte ich, dass die String-Ausgabe die beiden wichtigsten zusammenhängenden Einheiten anzeigt. Ein paar Beispiele:

  • 1 Stunde, 56 Minuten, 7 Sekunden -> 'eine Stunde und 56 Minuten'
  • 4 Stunden, 56 Sekunden -> 'vier Stunden'
  • 2 Tage, 56 Minuten -> 'zwei Tage'
  • 2 Tage, 1 Stunde, 1 Minute -> 'zwei Tage und eine Stunde'

Wäre dieses Verhalten für moment.js erwünscht oder weicht es zu stark von den Zielanwendungsfällen der Bibliothek ab?

Dies ist das sogenannte "Dauerformat", das für sich genommen ein sehr, sehr kompliziertes Thema ist. tl;dr ist etwas, das nicht im Kern implementiert ist, aber hier sind Möglichkeiten, das zu erreichen, was Sie manuell oder mit Plugins erreichen möchten. Sie können versuchen zu lesen: https://github.com/moment/moment/issues/1048 oder direkt verwenden: https://github.com/jsmreese/moment-duration-format.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen