<p>moment().fromNow() “几秒钟前”</p>

创建于 2012-12-06  ·  19评论  ·  资料来源: moment/moment

moment().fromNow() 返回“几秒钟前”。
为什么不是“刚刚”?

New Feature

最有用的评论

您可以通过执行诸如moment.langData('en').relativeTime.s = "just now"类的操作来自定义它,尽管带有后缀会看起来很奇怪。

如果需要,您可以创建一个包装fromNow

moment.fn.fromNowOrNow = function (a) {
    if (Math.abs(moment().diff(this)) < 1000) { // 1000 milliseconds
        return 'just now';
    }
    return this.fromNow(a);
}

所有19条评论

您可以通过执行诸如moment.langData('en').relativeTime.s = "just now"类的操作来自定义它,尽管带有后缀会看起来很奇怪。

如果需要,您可以创建一个包装fromNow

moment.fn.fromNowOrNow = function (a) {
    if (Math.abs(moment().diff(this)) < 1000) { // 1000 milliseconds
        return 'just now';
    }
    return this.fromNow(a);
}

谢谢蒂姆!

感谢您的代码。 我对“几秒钟前”没问题,但我也经常在完成操作后“几秒钟内”,因为服务器和客户端时钟不同步。 所以我想知道在这两种情况下都显示“刚才”是否有意义?

是的,如果在当前时间之前或之后 1 秒,上面的代码显示“刚刚”,因此如果您想增加该范围,您可以更改毫秒数。

moment.fn.fromNowOrNow = function (a) {
    if (Math.abs(moment().diff(this)) < 25000) { // 25 seconds before or after now
        return 'just now';
    }
    return this.fromNow(a);
}

谢谢,我明白了,但想知道将“现在”作为默认行为是否有意义,因为对于大多数用户来说,“几秒钟后”看到过去的事件似乎是一个错误。

+1 表示“刚才”是默认行为!

好吧,如果您的时钟不同步,您就会遇到问题。 我不认为修复它的正确位置是 moment 的人性化方法。 它是一个时间库,你告诉它显示未来的时间,它就这样做了。

如果您想将字符串“几秒钟前”更改为“刚才”,但保留“几秒钟内”,那是另一回事。 它还需要修复所有翻译;-)

moment.langData('en').relativeTime.s = "从不"; 是对我的问题的更正 #555

谢谢蒂姆!

在浏览器中解析服务器生成的时间戳时,时钟几乎总是会有点不同步。 这是 moment.js 的罕见用例吗?

我认为添加几秒钟的 epsilon 值,以便在任何方向上小于该值的间隔会产生“刚刚”或类似的结果是有道理的,如果这个值很容易改变它可以满足每个人的期望 - 值 0 表示当前行为,大于零的值是打浏览器/服务器偏移或类似的。

你怎么认为?

一个可配置的“epsilon 值”听起来是个好主意。

我认为@ejain问题的一个更简单的解决方案是在显示它之前将它

var now = moment();
var mom = momentFromServer < now ? now : momentFromServer;
mom.fromNow(); //=> a few seconds ago

如果这需要成为 Moment 的一部分,我的建议就是将其设为fromNow()的布尔参数。 或者更好的是,让 fromNow 采用(反向兼容)选项对象,例如fromNow({withSuffix: false, forcePast: true})

@icambron :很好的解决方案,如果您可以确定没有有效的未来时刻。

@timrwood感谢您的提示

如果你想替换所说的字符串,它实际上是moment.langData('en')._relativeTime.s = "just now"

我正在人性化日期(没有时间信息),因此将所有语言环境的 _relativeTime.s 更改为相当于“今天”是我的解决方案。

fromNow(true) 返回“2 分钟前”、“2 小时前”、“几秒前”。
你怎么能做“2m”或“2h”或“2s”或“2d”之类的事情?

@puneet94您可以使用https://momentjs.com/docs/#/customization/relative -time/ 更新您的区域设置字符串

FWIW,我能够通过为past指定一个函数来使用 2.12.0 应用“现在”:

moment.updateLocale('en', {
    relativeTime : {
        past: function(input) {
          return input === 'just now'
            ? input
            : input + ' ago'
        },
        s  : 'just now',
        future: "in %s",
        ss : '%d 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"
    }
});

@richardszalay你使用什么日期格式,你如何应用它?
我有一个日期字符串时间 = 1560955417474,
并希望在文本标签中显示它
<Text>{time}</Text>

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

paulyoung picture paulyoung  ·  3评论

tanepiper picture tanepiper  ·  3评论

Delgan picture Delgan  ·  3评论

slavafomin picture slavafomin  ·  3评论

RobinvanderVliet picture RobinvanderVliet  ·  3评论