Javascript 让Moment JS显示截至昨天的时间,然后开始显示格式化日期

Javascript 让Moment JS显示截至昨天的时间,然后开始显示格式化日期,javascript,angularjs,momentjs,Javascript,Angularjs,Momentjs,免责声明:我对javascript(和角度)非常陌生 我想让momentjs显示从现在到昨天的时间。3天之后,它将显示实际日期 使用随机日期的示例(日期差异始终为“今天”): 2017年10月10日下午6:41(未来) 明天下午6:41 今天下午6:41 昨天下午6:41 2017年10月10日下午6:41 不确定我应该提供哪些其他信息,但请询问是否有帮助。有几个函数可以帮助获得预期的输出 moment.format():您可以使用它来格式化字符串。例如:moment.format(“日/月

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

我想让momentjs显示从现在到昨天的时间。3天之后,它将显示实际日期

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

  • 2017年10月10日下午6:41(未来)
  • 明天下午6:41
  • 今天下午6:41
  • 昨天下午6:41
  • 2017年10月10日下午6:41

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

有几个函数可以帮助获得预期的输出

  • moment.format()
    :您可以使用它来格式化字符串。例如:
    moment.format(“日/月/年在hh:MM:ss”)
  • moment.isSame()
    :确定日期是否与今天相同
  • moment.diff()
    :确定日期之间的差异
  • 以下是一个基于您期望的输出的解决方案:

    我不确定到目前为止你们对这一时刻了解多少,所以这里有一种方法,从一开始:

    // 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"
    

    编辑:为了清晰起见,为“现在”创建了一个变量。

    感谢大家的输入。用你的例子,我能解决这个问题。不久之后,我找到了一个更好的方法来做我想做的事情,我将在这里分享

    使用momentJS日历功能使这项工作变得非常简单。这是我的过滤器,它正是我想要的加上一些额外的功能

    //此筛选器将显示今天、明天、昨天,然后将实际日期显示为“h:mm a时的M/D/Y”。
    //默认介词为“at”,但任何其他介词都可以作为第二个参数传入。
    .filter('formatForTimeAgo',函数(){
    返回函数timeTodayDateElse(日期,介词){
    介词=介词| |“at”
    片刻。朗('en'{
    “日历”:{
    “lastDay”:“[昨天][\n]['+介词+']h:mm a',
    "sameDay":"[今天][\n]['+介词+']h:mm a",,
    “nextDay”:“[明天][\n]['+介词+']h:mm a',
    ‘lastWeek’:‘M/D/YY[\n]['+介词+']h:mm a',
    'nextWeek':'M/D/YY[\n]['+介词+']h:mm a',
    “sameElse”:“M/D/YY[\n]['+介词+']h:mm a”
    }
    });
    返回时刻(日期)。日历();
    }
    
    })
    您应该添加您已经尝试过的内容。不过,您只需检查日期是否为今天/昨天/明天,在这种情况下,只需执行moment.format('string format')@binariedMe我尝试过搜索,但找不到任何希望执行我正在执行的操作的帖子。我目前使用的是标准格式{code>{n.created_at | time:'format':'m/D/YY[at]h:mm a'}显示日期为“10/10/17下午6:41”,但不显示“今天”,等等,您必须检查给定的日期是否为今天/明天/昨天,以显示特定的字符串,并且它在moment.js中根本不受开箱即用的支持。只需制作一个定制管道,并检查给定日期是否为t/t/y@binariedMe目前,为不受支持的功能创建自定义管道可能超出我的能力范围。尽管如此,我还是很感谢您的帮助。您可以创建一个函数getDisplayDate,您可以从前端调用它,而不是使用管道,例如:{{getDisplayDate(n.created_at)}通过做一些检查来实现逻辑上面的提琴是一个基于预期输出的粗略解决方案,可以进一步改进。这里是非常绿色的,如果我的解释不正确,我深表歉意。看起来您正在设置我上面给出的日期,并显示与该日期的差异?日期将始终是“今天”,就像创建日期一样。您需要一个日期来检查,对吗?与过去或未来日期相关联的内容?这行检查当前日期:
    var difference=moment().diff(targetDate,'days')因此,无论您现在想在哪里使用,都可以使用
    moment()
    。还是我误解了这个问题?我可能解释错了。将尝试解释将在其中使用的上下文。用户将发布“备注”,并且在备注上显示当前发布的日期。我想将日期更改为“今天”和“昨天”,如果适用,再加上发布时间。这将始终与现实世界的当前日期进行比较。抱歉,如果我混淆了您的代码或不清楚。这将完成计算任何两个日期之间的间隔是否超过三天,或者显示一个时间间隔字符串。无论何时,只要您想要一个值来表示今天,就可以使用
    moment()
    ,只要您想要一个值来表示另一个日期,就可以在任何地方使用
    moment(otherDateValue)
    if (difference === 0) displayValue = 'Today at ' + targetDate.format('hh:mm');