|
import { createDuration } from './create'; |
|
|
|
var round = Math.round; |
|
var thresholds = { |
|
ss: 44, |
|
s : 45, |
|
m : 45, |
|
h : 22, |
|
d : 26, |
|
M : 11 |
|
}; |
|
|
|
|
|
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.ss && ['s', seconds] || |
|
seconds < thresholds.s && ['ss', 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); |
|
} |
|
|
|
|
|
export function getSetRelativeTimeRounding (roundingFunction) { |
|
if (roundingFunction === undefined) { |
|
return round; |
|
} |
|
if (typeof(roundingFunction) === 'function') { |
|
round = roundingFunction; |
|
return true; |
|
} |
|
return false; |
|
} |
|
|
|
|
|
export function getSetRelativeTimeThreshold (threshold, limit) { |
|
if (thresholds[threshold] === undefined) { |
|
return false; |
|
} |
|
if (limit === undefined) { |
|
return thresholds[threshold]; |
|
} |
|
thresholds[threshold] = limit; |
|
if (threshold === 's') { |
|
thresholds.ss = limit - 1; |
|
} |
|
return true; |
|
} |
|
|
|
export function humanize (withSuffix) { |
|
if (!this.isValid()) { |
|
return this.localeData().invalidDate(); |
|
} |
|
|
|
var locale = this.localeData(); |
|
var output = relativeTime(this, !withSuffix, locale); |
|
|
|
if (withSuffix) { |
|
output = locale.pastFuture(+this, output); |
|
} |
|
|
|
return locale.postformat(output); |
|
} |
|
|