【问题标题】:Moment.js always returns 'a few seconds ago'Moment.js 总是返回“几秒钟前”
【发布时间】:2017-04-09 01:36:46
【问题描述】:

来自文档:

"要获取当前日期和时间,只需调用moment(),不带任何参数。

var now = moment();

这与调用moment(new Date()) 基本相同。

注意:从 2.14.0 版本开始,moment([])moment({}) 现在也返回。他们过去在 2.14.0 之前默认为今天开始,但这是任意的,所以它被更改了。”

我都试过了

moment().fromNow()

还有

moment(new Date()).fromNow() 

还有很多其他的选择。页面刷新时,时间始终显示为“几秒钟前”。

感谢您的帮助!

【问题讨论】:

  • 很抱歉格式很糟糕
  • 您能否展示一些代码,您在哪些地方使用这些命令、如何使用数据以及如何在页面上显示数据?
  • 这就是我在代码中的调用方式:
    {moment(new Date()).fromNow()}
  • edit提问;不要将代码放在 cmets 中。
  • 另外,您期望输出什么?您要求它获取当前日期和时间,并计算当前日期和时间与当前日期和时间之间的距离,它们总是相隔一秒(两次调用的时间)。跨度>

标签: javascript momentjs


【解决方案1】:

fromNow 方法将您传递给moment() 的日期与您调用该方法时的当前日期和时间进行比较。

如果您什么都不传递,它将始终返回a few seconds ago,或者将new Date() 传递给moment(),因为它将与现在的当前版本进行比较(可能在某些时候调用new Date())。这两个日期之间的差异将始终相等或相差几毫秒。

如果您希望显示与某个日期的时差,您需要将比较日期传递给moment,如下所示:

var date = '2016-04-09 02:57:00';

var diff = moment(date).fromNow(); // 'A year ago'

可以在文档http://momentjs.com/docs/#/displaying/fromnow/上找到示例输出和类似的比较方法

【讨论】:

    【解决方案2】:

    为了准确获得多少秒前,您可以执行以下操作。

    function timeAgo(time) {
        moment.updateLocale('en', {
            relativeTime: {
                future: "in %s",
                past: "%s ago",
                s: number=>number + "s ago",
                ss: '%ds ago',
                m: "1m ago",
                mm: "%dm ago",
                h: "1h ago",
                hh: "%dh ago",
                d: "1d ago",
                dd: "%dd ago",
                M: "a month ago",
                MM: "%d months ago",
                y: "a year ago",
                yy: "%d years ago"
            }
        });
    
        let secondsElapsed = moment().diff(time, 'seconds');
        let dayStart = moment("2018-01-01").startOf('day').seconds(secondsElapsed);
    
        if (secondsElapsed > 300) {
            return moment(time).fromNow(true);
        } else if (secondsElapsed < 60) {
            return dayStart.format('s') + 's ago';
        } else {
            return dayStart.format('m:ss') + 'm ago';
        }
    },
    

    结果是

    2 秒前

    【讨论】:

      【解决方案3】:

      您正在使用moment(new Date()),它将返回now,然后调用fromNow()。所以时间差总是 0 秒(或几毫秒),这就是显示的内容。

      你应该传递一些日期到时刻,比如:

      moment("12-25-1995", "MM-DD-YYYY"); 
      

      然后调用fromNow()就可以得到那个日期和now的时间差。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-05-15
        • 2021-12-06
        • 2017-07-20
        • 1970-01-01
        • 1970-01-01
        • 2020-10-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多