# Relative Time

URL: https://caijiao.org/dayjs/customization/relative-time
Source: docs/dayjs/customization/relative-time.md
Description: 使用Day.js的updateLocale方法配置英文相对时间，定义了未来和过去日期的前缀/后缀，以及不同时间单位的表达方式。

`Locale#relativeTime` 应该是 `dayjs#from` 里用来替换字符串的对象。

这依赖 [UpdateLocale](/dayjs/plugin/update-locale) 插件，才能正常运行

```javascript
dayjs.extend(updateLocale);

dayjs.updateLocale("en", {
  relativeTime: {
    future: "in %s",
    past: "%s ago",
    s: "a few seconds",
    m: "a minute",
    mm: "%d minutes",
    h: "an hour",
    hh: "%d hours",
    d: "a day",
    dd: "%d days",
    M: "a month",
    MM: "%d months",
    y: "a year",
    yy: "%d years",
  },
});
```

`Locale#relativeTime.future` 代表未来日期的前缀/后缀。 `Locale#relativeTime.past` 代表过去日期的前缀/后缀。

其余的属性，单字符代表单数，双字符代表复数。

## 更高级的占位符处理

如果语言配置需要更高级的占位符处理，则可以传入一个函数而不是字符串。 函数应该返回一个字符串。

```javascript
relativeTime: {
  ...,
  yy: function (number, withoutSuffix, key, isFuture) {
    return string;
  }
}
```

`number` 参数代表该键的单位数。 对于 `m`，该数字是分钟数，以此类推。

如果要不带后缀显示，则传入 `without Suffix` 参数为 true，如果要带后缀显示，则为 false。 (之所以使用逻辑倒置，是因为默认的行为是显示后缀。)

`key` 参数代表 `Locale#relativeTime`对象中的替换键。 (例如 `s m mm h` 等）

如果要使用未来的后缀/前缀，则 `isFuture` 参数将会为 true，如果要使用过去的前缀/后缀，则为 false。

## Relative Time 的阈值和舍入函数配置

您可以在使用此插件时，通过传入一个配置对象来更新其阈值和舍入函数的配置。

```javascript
var config = {
  thresholds: [{}],
  rounding: function
}
dayjs.extend(relativeTime, config)
```

`thresholds` 是一个 `Array` 的 `Object` 定义了每个一分钟、一小时等等的单位。 例如，默认情况下，超过 45 秒会被视为一分钟，超过 22 小时会被视为一天，依此类推。 要改变这个，可以传入一个新的 `thresholds`。

```javascript
// strict thresholds
var thresholds = [
  { l: "s", r: 1 },
  { l: "m", r: 1 },
  { l: "mm", r: 59, d: "minute" },
  { l: "h", r: 1 },
  { l: "hh", r: 23, d: "hour" },
  { l: "d", r: 1 },
  { l: "dd", r: 29, d: "day" },
  { l: "M", r: 1 },
  { l: "MM", r: 11, d: "month" },
  { l: "y", r: 1 },
  { l: "yy", d: "year" },
];
```

也可以添加自定义键值并更新相应的语言设置。

```javascript
var thresholds = [
  ...,
  { l: 'ss', r: 59, d: 'second' }
]
dayjs.updateLocale('en', {
  relativeTime: {
    ...,
    ss: "%d seconds"
  }
})
```

`rounding` 是一个根据语言配置在相对时间字符串展示之前处理数字的`Function` 。 要改变这个，可以传入一个新的 `rounding`。

```javascript
// Math.round by default
var rounding = Math.floor;
```
