Moment.js总是在几秒钟前返回'

时间:2017-04-09 01:36:47

标签: javascript momentjs

来自文档:

"要获取当前日期和时间,只需拨打moment(),无需参数。

var now = moment();

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

注意:从版本2.14.0开始,moment([])moment({})现在也会返回。他们习惯于在2.14.0之前默认为今天开始,但这是随意的,所以它被改变了。"

我试过了两次

moment().fromNow()

以及

moment(new Date()).fromNow() 

还有很多其他选择。页面刷新后,时间总是在几秒钟前显示'。

感谢您的帮助!

3 个答案:

答案 0 :(得分:4)

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

如果您没有传递任何内容或a few seconds ago传递给new Date(),它将始终返回moment(),因为它会将其与当前版本的版本进行比较(可能会调用{{1} } 在某一点)。这两个日期之间的差异总是相等或几毫秒的差异。

如果您希望显示与日期的时差,则需要将比较日期传递到new Date(),如下所示:

moment

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

上找到

答案 1 :(得分:3)

要确切知道多少秒之前,您可以执行以下操作。

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';
    }
},

结果将是

  

2s前

答案 2 :(得分:0)

您正在使用moment(new Date()),它将返回now,然后调用fromNow()。因此,时差总是为0秒(或几毫秒),以便显示出来的内容。

你应该传递一些日期,如:

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

然后在其上调用fromNow(),以便在该日期和now之间获得时差。