免责声明:我对javascript(和角度)非常陌生。
我试图让时间显示从现在到昨天的时间。一旦它过了3天,它就会显示实际日期。
使用随机日期的示例(日期差异将始终为"今天"):
不确定我应该提供哪些其他信息,但请询问是否有任何帮助。
答案 0 :(得分:1)
感谢大家的投入。使用您的示例我能够解决问题。在我找到了一个更好的方法来做我想做的事情后不久,我将在这里分享。
使用momentJS日历功能可以非常简单。这是我的过滤器,它正是我想要的,加上一些额外的功能。
//This filter will display today, tomorrow, yesterday then display the actual date as 'M/D/Y at h:mm a'.
//Default preposition is 'at', but any other can be passed in as the second parameter.
.filter('formatForTimeAgo', function () {
return function timeTodayDateElse(date, preposition){
preposition=preposition|| 'at'
moment.lang('en', {
'calendar' : {
'lastDay' : '[Yesterday] [\n][ '+preposition+' ] h:mm a',
'sameDay' : '[Today] [\n][ '+preposition+' ] h:mm a',
'nextDay' : '[Tomorrow] [\n][ '+preposition+' ] h:mm a',
'lastWeek' : 'M/D/YY [\n]['+preposition+'] h:mm a',
'nextWeek' : 'M/D/YY [\n]['+preposition+'] h:mm a',
'sameElse' : 'M/D/YY [\n]['+preposition+'] h:mm a'
}
});
return moment(date).calendar();
}
})

格式化后的
{{yourDate | }}
将如下所示:Today at 10:17 pm
,Yesterday at 10:17 pm
或Tomorrow at 10:17 pm
。一旦+/- 2天,它将显示为数字日期,例如9/13/17 at 10:17 pm
。
您可以使用第二个参数插入自定义介词(默认为" at")。
示例:{{yourDate | formatForTimeAgo : 'by'}}
将更改" at"到" by"所以你得到Today by 10:17 pm
,Yesterday by 10:17 pm
等
再一次,谢谢。这是一次很棒的学习经历。
答案 1 :(得分:0)
有一些函数可以帮助我们获得预期的输出。
moment.format()
:您可以使用它来格式化您想要的字符串。例如:moment.format("dd/MM/YY at hh:mm:ss")
moment.isSame()
:确定日期是否与今天相同。moment.diff()
:确定日期之间的差异。这是一个基于您期望输出的解决方案: https://jsfiddle.net/3ruv8aj3/
答案 2 :(得分:0)
我不确定你到目前为止已经熟悉了多少时间,所以从一开始就有一种方法可以做到:
// get today's date and time
var now = moment();
// will hold our display string (we'll set this in a minute)
var displayValue = '';
// target date & time in string format (YYYY-MM-DD hh:mm)
// you can also use a JavaScript date object instead of a string
var dateString = '2017-10-10 06:41';
// create a moment wrapper for the past/future date
var targetDate = moment(dateString);
// how many total days difference between then and now?
// calling moment() with no args defaults to current date and time
// first argument to `diff` is the date to subtract
// second argument is the unit of time to measure in
var difference = now.diff(targetDate, 'days');
if (difference > 3 || difference < -3) {
// if the date is more than three days in the past or more than three days into the future...
displayValue = targetDate.format('MM-DD-YYYY') + ' at ' + targetDate.format('hh:mm');
} else {
// otherwise...
displayValue = targetDate.fromNow();
}
console.log(displayValue); // > "10-10-2017 at 06:41"
编辑:如果目标日期恰好是今天,并且您想显示“今天”#39;而不是片刻的默认&#39; 15小时前&#39;,只需检查0的差异。
if (difference === 0) displayValue = 'Today at ' + targetDate.format('hh:mm');
编辑:为了清楚起见,为&#39;现在&#39;创建了一个变量。