Javascript 库,用于人性化的相对日期格式设置 [已关闭]

2022-08-30 05:40:55

我想以人性化的格式显示一些相对于当前日期的日期。

人性化的相对日期示例:

  • 10 秒前
  • 20分钟后
  • 11小时前
  • 5 周 前
  • 2 个月 前

基本上忠实地保留了最高数量级(并且根据偏好,仅在通过其中2个单位时向上移动单位 - 5周而不是1个月)。

虽然我可以忍受一个控制较少,甚至更友好的日期的图书馆,例如:

  • 昨天
  • 明天
  • 上个星期
  • 几分钟前
  • 几个小时内

有没有流行的库?


答案 1

自从我写了这个答案以来,一个众所周知的图书馆是时刻.js


可用的库,但自己实现它是微不足道的。只需使用一些条件。

假设是要进行比较的时间的实例化对象。dateDate

// Make a fuzzy time
var delta = Math.round((+new Date - date) / 1000);

var minute = 60,
    hour = minute * 60,
    day = hour * 24,
    week = day * 7;

var fuzzy;

if (delta < 30) {
    fuzzy = 'just then.';
} else if (delta < minute) {
    fuzzy = delta + ' seconds ago.';
} else if (delta < 2 * minute) {
    fuzzy = 'a minute ago.'
} else if (delta < hour) {
    fuzzy = Math.floor(delta / minute) + ' minutes ago.';
} else if (Math.floor(delta / hour) == 1) {
    fuzzy = '1 hour ago.'
} else if (delta < day) {
    fuzzy = Math.floor(delta / hour) + ' hours ago.';
} else if (delta < day * 2) {
    fuzzy = 'yesterday';
}

您需要调整此参数以处理将来的日期。


答案 2

我写了一.js,一个日期库来做这件事。它大约是5KB(2011)52KB(2019),适用于浏览器和Node。它也可能是JavaScript最流行和最着名的日期库。

它支持timeago,格式化,解析,查询,操作,i18n等。

过去日期的Timeago(相对时间)是用 moment().fromNow() 完成的。例如,要以 timeago 格式显示 2019 年 1 月 1 日::

let date = moment("2019-01-01", "YYYY-MM-DD");
console.log(date.fromNow());
<script src="https://momentjs.com/downloads/moment.min.js"></script>

timeago 字符串可以使用 moment.updateLocale() 进行自定义,因此您可以根据需要更改它们。

截止值不是问题要求的(“5周”与“1个月”),但它记录了哪些字符串用于什么时间范围。