return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);
}
-function relativeTime (posNegDuration, withoutSuffix, locale) {
+function relativeTime (posNegDuration, withoutSuffix, thresholds, locale) {
var duration = createDuration(posNegDuration).abs();
var seconds = round(duration.as('s'));
var minutes = round(duration.as('m'));
return true;
}
-export function humanize (withSuffix) {
+export function humanize (withSuffixOrOptions) {
if (!this.isValid()) {
return this.localeData().invalidDate();
}
+ var withSuffix = false;
+ var th = thresholds;
+
+ if (typeof withSuffixOrOptions === 'boolean') {
+ withSuffix = withSuffixOrOptions;
+ }
+ else if (typeof withSuffixOrOptions === 'object') {
+ var ws = withSuffixOrOptions.withSuffix;
+ if (typeof ws === 'boolean') {
+ withSuffix = ws;
+ }
+
+ var t = withSuffixOrOptions.thresholds;
+ if (typeof t === 'object') {
+ // Fill in missing keys with the current values
+ th = Object.assign({}, thresholds, t);
+ if (typeof t.s === 'number') {
+ th.ss = t.s - 1;
+ }
+ }
+ }
+
var locale = this.localeData();
- var output = relativeTime(this, !withSuffix, locale);
+ var output = relativeTime(this, !withSuffix, th, locale);
if (withSuffix) {
output = locale.pastFuture(+this, output);
assert.equal(moment.duration({seconds: 44}).humanize(true), 'in a few seconds', '44 seconds = a few seconds');
assert.equal(moment.duration({seconds: -44}).humanize(true), 'a few seconds ago', '44 seconds = a few seconds');
assert.equal(moment.duration({seconds: +44}).humanize(true), 'in a few seconds', '44 seconds = a few seconds');
+ assert.equal(moment.duration({seconds: 44}).humanize({withSuffix: true}), 'in a few seconds', '44 seconds = a few seconds');
+ assert.equal(moment.duration({seconds: -44}).humanize({withSuffix: true}), 'a few seconds ago', '44 seconds = a few seconds');
+ assert.equal(moment.duration({seconds: +44}).humanize({withSuffix: true}), 'in a few seconds', '44 seconds = a few seconds');
+});
+
+test('humanize duration with options', function (assert) {
+ var thresholds = {s: 9};
+ moment.locale('en');
+ assert.equal(
+ moment.duration({seconds: -10}).humanize({thresholds: thresholds}),
+ 'a minute',
+ '10 seconds = a minute (with thresholds)'
+ );
+ assert.equal(
+ moment.duration({seconds: 10}).humanize({thresholds: thresholds, withSuffix: true}),
+ 'in a minute',
+ '10 seconds = a minute (with thresholds and suffix)'
+ );
+ assert.equal(
+ moment.duration({weeks: 3}).humanize({thresholds: {d: 7, w: 4}, withSuffix: true}),
+ 'in 3 weeks',
+ 'in 3 weeks = in 3 weeks (with thresholds and suffix)'
+ );
});
test('bubble value up', function (assert) {