【问题标题】:How to show time ago in javascript (node js)如何在javascript(节点js)中显示时间前
【发布时间】:2016-03-24 22:43:39
【问题描述】:

其实我有一个日期时间或时间戳格式看起来像2015-12-18 07:10:54这个时间应该被转换或修改为2小时前或其他。 p>

我试过这个。但是这有问题。

始终显示 8 天前。 {这是错误的估计。}

function ( date ) {

    var seconds = Math.floor(( new Date() - date ) / 1000 );

    var interval = Math.floor( seconds / 31536000 );

    if ( interval == 1 ) {

        return interval + " year ago";
    }
    if ( interval > 1 ) {

        return interval + " years ago";
    }

    interval = Math.floor( seconds / 2592000 );
    if ( interval == 1 ) {

        return interval + " month ago";
    }
    if ( interval > 1 ) {

        return interval + " months ago";
    }

    interval = Math.floor( seconds / 86400 );
    if ( interval == 1 ) {

        return interval + " day ago";
    }
    if ( interval > 1 ) {

        return interval + " days ago";
    }

    interval = Math.floor( seconds / 3600 );
    if ( interval == 1 ) {

        return interval + " hour ago";
    }
    if ( interval > 1 ) {

        return interval + " hours ago";
    }

    interval = Math.floor( seconds / 60 );
    if ( interval == 1 ) {

        return interval + " minute ago";
    }
    if ( interval > 1 ) {

        return interval + " minutes ago";
    }

    return Math.floor(seconds) + " seconds ago";
}

【问题讨论】:

  • 简单的解决方案是使用类似 momentJS 的东西。
  • 使用 MomentJS npmjs.com/package/moment
  • 你有一个正确的 JS 时间戳还是 2015-12-18 07:10:54 是你所拥有的?因为解析时间戳的识别格式比解析任意格式要容易得多。

标签: javascript node.js


【解决方案1】:

我可以建议使用 MomentJS 这是一个强大的库来管理日期,安装它:

npm install --save moment

然后您只需从现在开始获取时间:

moment().fromNow();

或者

var yourDate = new Date();
moment(yourDate).fromNow();

或者按照你的例子:

moment("2015-12-18 07:10:54", "YYYY-MM-DD HH:mm:ss").fromNow();

如果你有如下 ISO 格式的日期,则不需要格式化,直接使用即可:

moment("2015-12-09T12:09:30.000Z").fromNow()

【讨论】:

  • 那太好了。但给了我无效的日期。实际上,在我的数据库中,时间保存为,如果我获取那个时间,那么它的打印看起来像 2015-12-09T12:09:30.000Z ,那么如何格式化这个日期? :o
  • 您不需要格式化该日期,因为它是标准日期,所以只需这样做:moment("2015-12-09T12:09:30.000Z").fromNow() 输出:9 days ago
  • view : 2015-12-09T12:09:30.000Z 但是数据库 : 2015-12-18 07:10:54 ,怎么可能?
【解决方案2】:

使用MomentJS这种操作变得简单为:

moment().subtract(10, 'days').calendar(); // 12/08/2015
moment().subtract(6, 'days').calendar();  // Last Saturday at 10:10 AM
moment().subtract(3, 'days').calendar();  // Last Tuesday at 10:10 AM
moment().subtract(1, 'days').calendar();  // Yesterday at 10:10 AM
moment().calendar();                      // Today at 10:10 AM
moment().add(1, 'days').calendar();       // Tomorrow at 10:10 AM
moment().add(3, 'days').calendar();       // Monday at 10:10 AM
moment().add(10, 'days'

【讨论】:

  • 我试过 moment("2015-12-18 07:10:54", "yyyy-mm-dd h:MM:ss").fromNow();但返回“3 个月前”。
  • 试试这个moment("2015-12-18 07:10:54").format("YYYY-mm-dd h:MM:ss");
  • 应该是moment("2015-12-18 07:10:54", "YYYY-MM-DD HH:mm:ss").fromNow();查看我的答案
  • 这绝对是@Michelem 在他的回答中所说的
【解决方案3】:

这个时间应该被转换或修改为 2 小时前,否则

var result = document.querySelector('#result');
var dateFromString = new Date('2015-12-18 07:10:54');

result.textContent = 'dateFromString: ' + dateFromString;

// dateFromString: travel 2 hours back
dateFromString.setHours(dateFromString.getHours()-2);
result.textContent += '\n2 hours before 2015-12-18 07:10:54: ' + 
                       dateFromString;


// determine difference between 2015-12-18 07:10:54 and the (time traveled) dateFromString
var difference = dateDiffCalc([new Date('2015-12-18 07:10:54'), dateFromString])
result.textContent += '\nHours difference dateFromString and '+
                      '2015-12-18 07:10:54: ' +
                      difference.hours;

function dateDiffCalc(value) {
  var ms = Math.abs(value[0].getTime()-value[1].getTime());
  var secsdf = Math.floor(((ms/1000)%(60*60))%60);
  var mindf  = Math.floor((ms/(60*1000))%60);
  var hourdf = Math.floor(ms/(60*1000*60)%24);
  var daydf  = Math.round((ms/(60*1000*60))/24);
  return {
    days: daydf,
    hours: hourdf,
    minutes: mindf,
    seconds: secsdf
  };
}
<pre id="result"></pre>

【讨论】:

  • 我同意这个用例的时刻太重了,这样的事情对于这个问题更可行。但是,此解决方案确实需要适当的 JS 时间戳,并且问题并未表明这是给定的。看起来实际的问题是将不规则的时间戳解析为 JS 可以理解的时间戳。我也不确定那一刻是否有帮助。得到一个合适的时间戳应该是这个问题的正确答案。
【解决方案4】:

正如其他人所建议的那样,通过使用 Moment API,您可以非常轻松地实现这一目标。

// Get the Time Since Content was Posted with Moment.js
  const getDate = (date) => {
    const dateTime = new Date(date * 1000);
    return moment(dateTime).fromNow();
  };

date 是 UTC 时间戳

【讨论】:

    猜你喜欢
    • 2011-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-24
    • 1970-01-01
    • 1970-01-01
    • 2013-12-13
    • 1970-01-01
    相关资源
    最近更新 更多