답변:
오늘과 내일과 어제의 날짜를 얻기 위해 이것을 할 수도 있습니다
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 */ )
)
편집 : Moment ^ 2.12.0에는 이제 updateLocale
방법이 있습니다. updateLocale
와 locale
기능적으로 동일하게 나타나며, locale
아직 사용되지 있지만, 새로운 방법을 사용하는 대답을 업데이트되지 않습니다.
나는 순간 add()
과 의 조합을 사용합니다.endOf()
//...
const today = moment().endOf('day')
const tomorrow = moment().add(1, 'day').endOf('day')
if (date < today) return 'today'
if (date < tomorrow) return 'tomorrow'
return 'later'
//...
요구 사항 :
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 + "]";
}
});
}
NB : 버전 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는 호출 당 달력 출력 형식 지정을 지원합니다. 자세한 문서는 Moment-Calendar를 확인하십시오 .
**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는 연도를 나타냅니다.Moment 문서에서 확인
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