Moment.js总是返回“几秒钟前”

mkh*_*ra2 3 javascript momentjs

从文档:

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

var now = moment();
Run Code Online (Sandbox Code Playgroud)

这基本上与call相同moment(new Date())

注意:从2.14.0版本,moment([])并且moment({})现在还回来。他们曾经默认将默认值设为2.14.0之前的今天开始,但这是任意的,因此已更改。”

我都尝试过

moment().fromNow()
Run Code Online (Sandbox Code Playgroud)

并且

moment(new Date()).fromNow() 
Run Code Online (Sandbox Code Playgroud)

和许多其他选择。页面刷新后,时间始终显示为“几秒钟前”。

谢谢你的帮助!

Lig*_*iga 6

为了获得准确的秒数,您可以执行以下操作。

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';
    }
},
Run Code Online (Sandbox Code Playgroud)

结果将是

2 秒前


Dan*_*vey 5

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'
Run Code Online (Sandbox Code Playgroud)

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