moment().fromNow() 返回“几秒钟前”。
为什么不是“刚刚”?
您可以通过执行诸如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>
最有用的评论
您可以通过执行诸如
moment.langData('en').relativeTime.s = "just now"
类的操作来自定义它,尽管带有后缀会看起来很奇怪。如果需要,您可以创建一个包装
fromNow
。