import { createDuration } from './create';
|
|
var round = Math.round;
|
var thresholds = {
|
s: 45, // seconds to minute
|
m: 45, // minutes to hour
|
h: 22, // hours to day
|
d: 26, // days to month
|
M: 11 // months to year
|
};
|
|
// helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize
|
function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {
|
return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);
|
}
|
|
function relativeTime (posNegDuration, withoutSuffix, locale) {
|
var duration = createDuration(posNegDuration).abs();
|
var seconds = round(duration.as('s'));
|
var minutes = round(duration.as('m'));
|
var hours = round(duration.as('h'));
|
var days = round(duration.as('d'));
|
var months = round(duration.as('M'));
|
var years = round(duration.as('y'));
|
|
var a = seconds < thresholds.s && ['s', seconds] ||
|
minutes === 1 && ['m'] ||
|
minutes < thresholds.m && ['mm', minutes] ||
|
hours === 1 && ['h'] ||
|
hours < thresholds.h && ['hh', hours] ||
|
days === 1 && ['d'] ||
|
days < thresholds.d && ['dd', days] ||
|
months === 1 && ['M'] ||
|
months < thresholds.M && ['MM', months] ||
|
years === 1 && ['y'] || ['yy', years];
|
|
a[2] = withoutSuffix;
|
a[3] = +posNegDuration > 0;
|
a[4] = locale;
|
return substituteTimeAgo.apply(null, a);
|
}
|
|
// This function allows you to set a threshold for relative time strings
|
export function getSetRelativeTimeThreshold (threshold, limit) {
|
if (thresholds[threshold] === undefined) {
|
return false;
|
}
|
if (limit === undefined) {
|
return thresholds[threshold];
|
}
|
thresholds[threshold] = limit;
|
return true;
|
}
|
|
export function humanize (withSuffix) {
|
var locale = this.localeData();
|
var output = relativeTime(this, !withSuffix, locale);
|
|
if (withSuffix) {
|
output = locale.pastFuture(+this, output);
|
}
|
|
return locale.postformat(output);
|
}
|