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秒前または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);
}
おかげで、私はそれを手に入れましたが、過去のイベントの「数秒で」を見ることがほとんどのユーザーにとってバグのように見えることを考えると、「ちょうど今」がデフォルトの動作であることが理にかなっているのだろうかと思っていました。
'just now'の+1がデフォルトの動作になります!
さて、あなたの時計が同期していない場合、あなたは問題を抱えています。 それを修正する適切な場所は、瞬間の人間化された方法ではないと思います。 その時間ライブラリは、将来の時間を表示するように指示し、そうします。
「数秒前」の文字列を「今」に変更したいが、「数秒後」のままにしておく場合は別のことです。 また、すべての翻訳の修正が必要になります;-)
moment.langData( 'en')。relativeTime.s = "never"; 私の問題#555の修正でした
ありがとうティム!
ブラウザでサーバーが生成したタイムスタンプを解析するとき、ほとんどの場合、時計は少し同期していません。 これはmoment.jsのまれなユースケースですか?
数秒のイプシロン値を追加して、どの方向よりも小さい間隔で「今」などが生成されるようにすることは理にかなっていると思います。この値を簡単に変更できる場合は、すべての人の期待に合わせることができます。値0は現在の動作を意味します。 、ゼロより大きい値は、ブラウザ/サーバーのオフセットなどと戦うためのものです。
どう思いますか?
構成可能な「イプシロン値」は良い考えのように聞こえます。
@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これで使用している日付形式と、これをどのように適用しますか?
日付文字列time = 1560955417474、
テキストタグ内に表示したい<Text>{time}</Text>
最も参考になるコメント
moment.langData('en').relativeTime.s = "just now"
ようなことをすることでそれをカスタマイズできますが、接尾辞を付けると奇妙に見えます。必要に応じて、
fromNow
をラップするメソッドを作成できます。