回答:
これを実行して、今日と明日と昨日の日付を取得することもできます
let today = moment();
let tomorrow = moment().add(1,'days');
let yesterday = moment().add(-1, 'days');
new Date()
、libが常に表示する警告を回避することです(momentjs.com/docs/#/parsing/nowを参照)
new Date()
必要?moment()
とにかく今日の日付を使用して瞬間のインスタンスを生成したと思った
.fromNow
と.calendar
を使用して日付を表示する方法をカスタマイズできmoment.updateLocale
ます。次のコードは.calendar
、質問に従って表示する方法を変更します。
moment.updateLocale('en', {
calendar : {
lastDay : '[Yesterday]',
sameDay : '[Today]',
nextDay : '[Tomorrow]',
lastWeek : '[Last] dddd',
nextWeek : '[Next] dddd',
sameElse : 'L'
}
});
質問に基づいて、.calendar
方法はより適切であるようです- .fromNow
過去/現在のプレフィックス/サフィックスが必要ですが、詳細を知りたい場合は、http://momentjs.comでドキュメントを読むことができます/ docs /#/ customization / relative-time /。
あなたが定義するときにロケールを上書きするのではなく、一つだけの場所でこれを使用するには、最初の引数としてお好みの文字列を渡すmoment.updateLocale
と、そのロケールを使用して、カレンダー法呼び出し(例えば。moment.updateLocale('yesterday-today').calendar( /* moment() or whatever */ )
)
編集:モーメント^ 2.12.0にupdateLocale
メソッドが追加されました。updateLocale
そしてlocale
機能的に同じであるように見える、とlocale
まだ非推奨が、新しいメソッドを使用するための答えを更新されません。
要件:
moment().fromNow()
機能を使用してください。"today"
、"yesterday"
、"tomorrow"
など、解決:
// call this function, passing-in your date
function dateToFromNowDaily( myDate ) {
// get from-now for this date
var fromNow = moment( myDate ).fromNow();
// ensure the date is displayed with today and yesterday
return moment( myDate ).calendar( null, {
// when the date is closer, specify custom values
lastWeek: '[Last] dddd',
lastDay: '[Yesterday]',
sameDay: '[Today]',
nextDay: '[Tomorrow]',
nextWeek: 'dddd',
// when the date is further away, use from-now functionality
sameElse: function () {
return "[" + fromNow + "]";
}
});
}
注意:バージョン2.14.0以降、カレンダー関数のフォーマット引数をコールバックにすることができます。http://momentjs.com/docs/#/displaying/calendar-time/を参照してください。
あなたはこれを使うことができます:
const today = moment();
const tomorrow = moment().add(1, 'days');
const yesterday = moment().subtract(1, 'days');
2.10.5以降は、呼び出しごとのカレンダー出力形式の指定をサポートしています。詳細なドキュメントについては、モーメント-カレンダーを確認してください。
**Moment 2.10.5**
moment().calendar(null, {
sameDay: '[Today]',
nextDay: '[Tomorrow]',
nextWeek: 'dddd',
lastDay: '[Yesterday]',
lastWeek: '[Last] dddd',
sameElse: 'DD/MM/YYYY'
});
2.14.0以降、カレンダーは値を返すためにコールバックを取ることもできます。
**Moment 2.14.0**
moment().calendar(null, {
sameDay: function (now) {
if (this.isBefore(now)) {
return '[Will Happen Today]';
} else {
return '[Happened Today]';
}
/* ... */
}
});
Moment.jsでは、from()メソッドには、求めている毎日の精度があります。
var today = new Date();
var tomorrow = new Date();
var yesterday = new Date();
tomorrow.setDate(today.getDate()+1);
yesterday.setDate(today.getDate()-1);
moment(today).from(moment(yesterday)); // "in a day"
moment(today).from(moment(tomorrow)); // "a day ago"
moment(yesterday).from(moment(tomorrow)); // "2 days ago"
moment(tomorrow).from(moment(yesterday)); // "in 2 days"
from
実際には毎日の精度はありません。たとえば、昨日が4時間前で、5時間前の時間を選択した場合、昨日の代わりに「5時間前」と表示されます。このソリューションは、精度とは何の関係もありませんfrom
が、渡された日付の。
これが私がやったことです
var dateText = moment(someDate).from(new Date());
var startOfToday = moment().startOf('day');
var startOfDate = moment(someDate).startOf('day');
var daysDiff = startOfDate.diff(startOfToday, 'days');
var days = {
'0': 'today',
'-1': 'yesterday',
'1': 'tomorrow'
};
if (Math.abs(daysDiff) <= 1) {
dateText = days[daysDiff];
}
.add()および.subtract()メソッドを使用して、昨日と明日の日付を取得できます。次に、formatメソッドを使用して日付のみを取得します。.format( "D / M / Y")、Dは日を表し、Mは月を表し、Yは年を表します。モーメントドキュメントをチェックイン
let currentMilli = Date.now()
let today = Moment(currentMilli).format("D/M/Y");
let tomorrow = Moment(currentMilli).add(1, 'days').format("D/M/Y");
let yesterday = Moment(currentMilli).subtract(1, 'days').format("D/M/Y");
結果は次のようになります。
Current Milli - 1576693800000
today - 19/12/2019
tomorrow - 18/12/2019
yesterday - 18/12/2019