当前位置: 首页 > 知识库问答 >
问题:

片刻js从现在开始/以天、月为单位

贲功
2023-03-14

我用moment.js来显示从“今天”到帖子发布的时间,对于任何带有原始国际标准化组织日期的帖子。iso-date”,然后在div中输出帖子的时间量。我有一个工作正常的脚本,但是它只显示“年”,如果帖子是今天,那么它什么也不输出。同样,它只显示前12个月后的几个月和几年,所以1-11个月,然后只显示x年前。

当前输出“3个月前发布”、“一年前发布”、“e年前发布”等

所以我想看到的是类似“刚刚发布”、“今天发布”、“6天前发布”、“3周前、5天前发布”、“9个月前、3周前、5天前发布”和“3年前、9个月前、3周前、5天前发布”或“最近的日期间隔”。

标记html" target="_blank">示例

<div class="posts-list">

<div class="grid-block">
<div class="iso-date">2019-09-30</div>
<div class="display-date"></div>
</div>

<div class="grid-block">
<div class="iso-date">2020-07-12</div>
<div class="display-date"></div>
</div>

</div>

以下是当前脚本:-

// Moment 
$(document).ready(function () {

// Moment targets
  var publishedDate = ".iso-date";
  var displayDate = ".display-date";
  
  $(publishedDate).each(function (i, e) {
  
    var p = $(e).text();
    var a = $(e).next(displayDate);
    
    if (moment(p).isValid()) {
    
   var m = moment(new Date(p));
   var s = moment(new Date(m)).fromNow();
    // var s = moment(new Date(m)).diff(moment(), 'milliseconds');  

      a.text("Posted " + s);
    }

  });

});

我将感谢您对如何使用Moment.jsr实现这一点的投入,也许没有任何脚本依赖-jQuery/JavaScript。

谢谢

Glennyboy

共有1个答案

刁越
2023-03-14

检查下面的代码片段。我在这里使用了这个答案,并按照您的要求实现了它。

function dateAgo(date) {  

    var startDate = new Date( date + " " + '12:00 AM');
    var endDate = new Date();

    var diffDate  = new Date(new Date() - startDate);

    var yearDiff  = diffDate.toISOString().slice(0, 4) - 1970;
    var monthDiff = diffDate.getMonth(); 
    var dayDiff   = diffDate.getDate()-1;

    var msec  = endDate - startDate;
    var mins  = Math.floor(msec / 60000);
    var hrs   = Math.floor(mins / 60);
    var days  = Math.floor(hrs / 24);
      
    var label = 'Posted ';
    if( mins <= 30 ){
        label += ' Just Now';
    }else if( hrs <= 24 ){
        label += ' Just Today';
    }else{
        if( yearDiff > 0  ){
            label += ( yearDiff > 1 ) ? yearDiff+' years, ' : yearDiff+' year, ';
        }

        if( monthDiff > 0 ){
            label += ( monthDiff > 1 ) ? monthDiff+' months, ' : monthDiff+' month, ';
        }

        if( dayDiff > 0 ){
            label += ( dayDiff > 1 ) ? dayDiff+' days ' : dayDiff+' day ';
        }

        label += 'ago';
    }
  
    return label;   
    
}

(function() {
    var elements = document.body.getElementsByClassName('iso-date');
    for (var i = 0; i < elements.length; i++) {
        var date  = elements[i].innerHTML;
        var label = dateAgo(date);
        elements[i].nextElementSibling.innerHTML = label;   
    }
})();
html lang-html prettyprint-override"><div class="grid-block">
<div class="iso-date">2019-09-30</div>
<div class="display-date"></div>
</div>

<div class="grid-block">
<div class="iso-date">2021-04-06</div>
<div class="display-date"></div>
</div>
 类似资料:
  • 如何以moment.js中的以下格式获取当月的第一天和最后一天和时间: 2016-09-01 00:00

  • 问题内容: 我有一个查询,返回1-12个月。(INT) 有没有办法从本月desc开始订购结果? 例子 谢谢! 编辑:到本月desc,我的意思是这个实际月份。MONTH(GetDate()) 问题答案: 按顺序尝试简单的数学运算,如果月份较小,则当前加12,不确定会对性能产生什么影响…

  • 从值126.55 (126分钟,55秒)我怎么能得到一个输出像02:06:55 我的输出是2:6:7233 期望输出02:06:55

  • 无法计算年、月、日两个日期之间的差异。问题是每个月有30天,每年有365天,没有例外。这里有很多话题,但我没有找到任何能解决我的问题或帮助我解决问题的。我发现的每一个主题都只是用普通的方法解决计算差分的问题,这很简单。我如何计算这种差异? 我使用的是Java 7(没有机会安装joda time)和groovy 2.4.0。 例子有: 谢谢

  • 也许我想多了。我想每周一上午9点发送本地通知,直到满足某些条件。我知道这可以通过设置的和组件来完成。我遇到的问题是我将传递给的值取决于正在使用的。如果我理解正确,则取决于用户的设置。例如,如果用户的日历周从周日开始,我会传递1到,但如果一周从周六开始,我会传递2。 我的问题是,我该如何解释时区、夏令时和周开始日之类的事情?

  • 本文向大家介绍JS根据年月获得当月天数的实现代码,包括了JS根据年月获得当月天数的实现代码的使用技巧和注意事项,需要的朋友参考一下