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);
}
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:
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.
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: