Zia*_*rno 92 javascript date momentjs
我喜欢这个moment().fromNow()功能,但是当日期接近时它太精确了 - 例如.我不希望它在'3小时'但'今天'显示 - 所以基本上是'每日'精度.
我尝试使用该moment().calendar()功能,如果日期差异超过1天,则不会格式化
Hus*_*enK 90
您也可以这样做以获取今天,明天和昨天的日期
let today = moment(new Date());
let tomorrow = moment(new Date()).add(1,'days');
let yesterday = moment(new Date()).add(-1, 'days');
Run Code Online (Sandbox Code Playgroud)
sva*_*don 32
您可以自定义方法.fromNow和.calendar方法显示日期的方式moment.updateLocale.以下代码将.calendar根据问题更改显示的方式:
moment.updateLocale('en', {
calendar : {
lastDay : '[Yesterday]',
sameDay : '[Today]',
nextDay : '[Tomorrow]',
lastWeek : '[Last] dddd',
nextWeek : '[Next] dddd',
sameElse : 'L'
}
});
Run Code Online (Sandbox Code Playgroud)
基于这个问题,这似乎是.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尚未弃用,但更新了使用较新方法的答案.
gui*_*ier 30
我使用的组合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'
//...
Run Code Online (Sandbox Code Playgroud)
小智 18
你可以用这个:
const today = moment();
const tomorrow = moment().add(1, 'days');
const yesterday = moment().subtract(1, 'days');
Run Code Online (Sandbox Code Playgroud)
Ben*_*Ben 15
要求:
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 + "]";
}
});
}
Run Code Online (Sandbox Code Playgroud)
注意:从版本2.14.0开始,日历功能的格式参数可以是回调,请参阅http://momentjs.com/docs/#/displaying/calendar-time/.
Afi*_*han 12
这是我使用moment执行此操作的方法:
let today = moment().format('DD MMMM YYYY');
let tomorrow = moment().add(1, 'days').format('DD MMMM YYYY').toString();
let yesterday = moment().subtract(1, 'days').startOf('day').format('DD MMMM YYYY').toString();
Run Code Online (Sandbox Code Playgroud)
Ada*_* Hv 11
我有类似的解决方案,但允许使用区域设置:
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'
Run Code Online (Sandbox Code Playgroud)
在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"
Run Code Online (Sandbox Code Playgroud)
所以这就是我最终做的
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];
}
Run Code Online (Sandbox Code Playgroud)
从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'
});
Run Code Online (Sandbox Code Playgroud)
从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]';
}
/* ... */
}
});
Run Code Online (Sandbox Code Playgroud)