【问题标题】:MomentJS - making fromNow() round downMomentJS - 使 fromNow() 向下舍入
【发布时间】:2015-07-22 07:18:32
【问题描述】:

我正在使用以下代码来计算一个人的年龄:

var year = 1964;
var month = 1;
var day = 20;
var age = moment(year + '-' + month + '-' + date, 'YYYY-MM-DD').fromNow(true);

fromNow() 的问题在于它根据小数点向上或向下舍入数字。我希望它只四舍五入。在上面的例子中,这个人的真实年龄是 51,但它返回的是 52,因为他的年龄实际上是 51.75。

如果我改用diff(),它会向下舍入,这是完美的。但它并没有给我漂亮的文字51 years old

var age = moment().diff([year, month - 1, date], 'years');

我的问题是,有没有办法让fromNow() 向下舍入?

【问题讨论】:

标签: momentjs


【解决方案1】:

您可以配置自定义舍入函数:

moment.relativeTimeRounding(Math.floor)

【讨论】:

    【解决方案2】:

    提供的解决方案是正确的,但我想我会添加一些解释,因为这是第一个谷歌结果。

    假设我有一个场景,我希望 30 秒前 1m 的日期显示 a minute ago 而不是 two minutes ago

    const minuteAndAHalfAgo = new Date();
    minuteAndAHalfAgo.setMinutes(minuteAndAHalfAgo.getMinutes() - 1);
    minuteAndAHalfAgo.setSeconds(minuteAndAHalfAgo.getSeconds() - 30)
    
    moment.relativeTimeRounding(Math.floor);
    console.log(moment(minuteAndAHalfAgo).fromNow()); // a minute ago
    

    relativeTimeRounding 函数将函数作为参数,在我们的例子中是Math.floor,这意味着相对时间评估将被向下舍入。这可以在文档 https://momentjs.com/docs/#/customization/relative-time-rounding/ 中找到 - 您还可以指定 relativeTimeThreshold — 对数字进行四舍五入的点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-05
      • 1970-01-01
      相关资源
      最近更新 更多