【问题标题】:moment - Issue with fromNow时刻 - fromNow 问题
【发布时间】:2019-10-11 09:16:21
【问题描述】:

嘿,我正在尝试使用 Moment 计算用户年龄。

function getAge(birthDate) {
  const start = moment(birthDate, "YYYY-MM-DD");
  const end = moment();
  return start.to(end, true);
}

5 月之前,结果超过 1 年:

getAge("1989-01-01"); // 31 years
getAge("1989-05-01"); // 30 years

示例:https://codesandbox.io/s/nostalgic-tesla-bzb3d

使用fromNow 而不是to 的行为是相同的

你知道如何解决这个问题吗?

【问题讨论】:

  • 是因为四舍五入到最接近的整数年份

标签: javascript momentjs


【解决方案1】:

.to() 的结果是一个相对时间字符串,它在内部对任一方向的值进行四舍五入(因此 29.5 年将变为 30 年)。它用于显示目的,例如在论坛或博客帖子中显示“3 分钟前发布”。

您正在寻找计算差异的.diff() 方法,但只会考虑第二个参数提供的完整测量单位,即截断实际数字。

  const start = moment(birthDate, "YYYY-MM-DD");
  age = moment().diff(start, "years");

https://codesandbox.io/s/naughty-lewin-e6vrt

【讨论】:

    【解决方案2】:

    您可以使用diff 函数,例如:

    function getAge(birthDate) {
      const start = moment(birthDate, "YYYY-MM-DD");
      const end = moment();
      return end.diff(start, 'years');
    }
    
    console.log(getAge("1989-01-01"));
    console.log(getAge("1989-05-01"));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多