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

2024-02-04

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


我认为答案集中在什么是记录在这里 http://documented%20here简而言之,使用函数调整部分区域设置以满足您的需求。

这是一个简短的示例:

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')并简单地对短值进行硬编码,然后根据需要设置区域设置。 我选择这个解决方案是因为我不知道您如何做出使用一种格式与另一种格式的决定。

为了完整起见,这取决于您知道需要操作哪个区域设置。如果区域设置的选择由最终用户决定,则问题会变得更加复杂。在这种情况下,我能想到的就是使用以下命令检索当前语言环境的配置moment.localeData()._relativeTime并将“m”成员更改为适合您的函数。您仍然需要找到一种方法来在正确的区域设置中表达“m”和“分钟”单位(不知道如何做到这一点)。 这个解决方案确实是最后的手段,因为我不知道是否_relativeTime随着时间的推移,它是一个安全的 API(我猜不是)。

希望这可以帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用两个不同的relativeTime 自定义? 的相关文章

随机推荐