Answers:
您还可以执行此操作以获取今天以及明天和昨天的日期
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版开始,日历函数的format参数可以是回调,请参见http://momentjs.com/docs/#/displaying/calendar-time/。
我有类似的解决方案,但允许使用语言环境:
let date = moment(someDate);
if (moment().diff(date, 'days') >= 1) {
return date.fromNow(); // '2 days ago' etc.
}
return date.calendar().split(' ')[0]; // 'Today', 'yesterday', 'tomorrow'
从2.10.5版本开始,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
并没有真正的日常精度。例如,如果昨天是四个小时前,而我选择的时间是五个小时前,它将显示“ 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