让Moment JS在昨天之前显示,然后开始显示格式化的日期

时间:2017-09-13 02:01:26

标签: javascript angularjs momentjs

免责声明:我对javascript(和角度)非常陌生。

我试图让时间显示从现在到昨天的时间。一旦它过了3天,它就会显示实际日期。

使用随机日期的示例(日期差异将始终为"今天"):

  • 10/10/17 at 6:41 pm(future)
  • 明天下午6:41
  • 今天下午6:41
  • 昨天下午6:41
  • 10/10/17 at 6:41 pm

不确定我应该提供哪些其他信息,但请询问是否有任何帮助。

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 pmYesterday at 10:17 pmTomorrow at 10:17 pm。一旦+/- 2天,它将显示为数字日期,例如9/13/17 at 10:17 pm

您可以使用第二个参数插入自定义介词(默认为" at")。 示例:{{yourDate | formatForTimeAgo : 'by'}}将更改" at"到" by"所以你得到Today by 10:17 pmYesterday by 10:17 pm

再一次,谢谢。这是一次很棒的学习经历。

答案 1 :(得分:0)

有一些函数可以帮助我们获得预期的输出。

  1. moment.format():您可以使用它来格式化您想要的字符串。例如:moment.format("dd/MM/YY at hh:mm:ss")
  2. moment.isSame():确定日期是否与今天相同。
  3. moment.diff():确定日期之间的差异。
  4. 这是一个基于您期望输出的解决方案: 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;创建了一个变量。