如何使用两个不同的relativeTime自定义?

时间:2015-03-03 08:15:57

标签: momentjs

我想在某些地方使用短的(例如{m: "1m"})而在其他地方使用较长的(例如{m: "one minute"})。

1 个答案:

答案 0 :(得分:2)

我认为答案的核心是documented here 简而言之,使用函数调整部分语言环境以满足您的需求。

这是一个简短的样本:

var useshort = false;

moment.locale( 'en', {
    relativeTime : {
        future: "in %s",
        past:   "%s ago",
        s:  "seconds",
        m:  function (/* number, withoutSuffix, key, isFuture */) { 'use strict';
         return useshort ? "1m" : "1 minute";
        },
        mm: "%d minutes",
        h:  "an hour",
        hh: "%d hours",
        d:  "a day",
        dd: "%d days",
        M:  "a month",
        MM: "%d months",
        y:  "a year",
        yy: "%d years"
    }
});

console.log(moment().subtract(1, "minute").fromNow() ); // 1 minute ago
console.log(moment().subtract(2, "minute").fromNow() ); // 2 minutes ago

useshort = true;
console.log(moment().subtract(1, "minute").fromNow() ); // 1m ago
console.log(moment().subtract(2, "minute").fromNow() ); // 2 minutes ago

由于你需要的是'm',我们可以放心地忽略这些参数(我认为),因为它们不会改变。我显示2分钟的偏移量,表明我们确实只修改了'm'的行为。

如果这对你来说太乱了(使用设置语言环境的范围内的变量),另一个选择当然是制作你自己的本地('en-short')并简单地对短片进行硬编码value,然后根据需要设置语言环境。 我选择这个解决方案是因为我不知道你如何决定使用一种格式而不是另一种格式。

要完成,这取决于您知道需要操作哪个区域设置的事实。如果区域设置的选择取决于最终用户,则问题会变得复杂一些。在这种情况下,我能想到的只是使用moment.localeData()._relativeTime检索当前语言环境的配置,并将'm'成员更改为适合您的功能。您仍然需要找到一种方法来在适当的区域设置中表达“m”和“分钟”单位(不知道该怎么做)。 这个解决方案实际上是最后的手段,因为我不知道_relativeTime是否是一个安全的API(我猜不会)。

希望这有帮助。