我正在尝试更改moment.js设置的日期的语言。默认是英语,但我想设置德语。以下是我的尝试:

var now = moment().format("LLL").lang("de");

它会产生NaN。

var now = moment("de").format("LLL");

这甚至不是反应。

var now = moment().format("LLL", "de");

没有变化:这仍然是用英语生成的结果。

这怎么可能呢?


当前回答

我还必须导入语言:

import moment from 'moment'
import 'moment/locale/es'  // without this line it didn't work
moment.locale('es')

然后像平常一样利用这一刻

console.log(moment(date).fromNow())

其他回答

对于那些在异步环境中工作的人来说,在按需加载区域设置时,moment的行为会出乎意料。

而不是

await import('moment/locale/en-ca');
moment.locale('en-ca');

颠倒顺序

moment.locale('en-ca');
await import('moment/locale/en-ca');

似乎locale被加载到当前选定的locale中,覆盖了之前设置的任何locale信息。所以先切换语言环境,再加载语言环境信息不会导致这个问题。

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>MomentJS</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js"></script>
    <script type="text/javascript" src="moment.js"></script>
    <script type="text/javascript" src="locale/ne.js"></script>
</head>
<body>
    <script>
        jQuery(document).ready(function($) {
            moment.locale('en'); // default the locale to English
            var localLocale = moment();

            moment.locale('ne'); // change the global locale to Nepalese
            var ne1 = localLocale.format('LLLL');
            var ne2 = moment().format('LLLL');

            $('.ne1').text(ne1);
            $('.ne2').text(ne2);
        });
    </script>
    <p class="ne1"></p>
    <p class="ne2"></p>
</body>
</html>

Demo

你需要时间。lang(警告:lang()自2.8.0时刻起已弃用,请使用locale()代替):

moment.lang("de").format('LLL');

http://momentjs.com/docs/#/i18n/


从v2.8.1开始,moment.locale('de')设置本地化,但不返回时刻。一些例子:

var march = moment('2017-03')
console.log(march.format('MMMM')) // 'March'

moment.locale('de') // returns the new locale, in this case 'de'
console.log(march.format('MMMM')) // 'March' still, since the instance was before the locale was set

var deMarch = moment('2017-03')
console.log(deMarch.format('MMMM')) // 'März'

// You can, however, change just the locale of a specific moment
march.locale('es')
console.log(march.format('MMMM')) // 'Marzo'

总而言之,在全局moment上调用locale将为所有未来moment实例设置locale,但不会返回moment实例。在实例上调用locale,为该实例设置它并返回该实例。

此外,正如Shiv在评论中所说,确保你使用的是“moment-with-locale .min.js”而不是“moment.min.js”,否则它将无法工作。

返回moment(status.created_at).locale('es').fromNow();

我不知道发生了什么变化,但像这样导入语言文件对我有用

import 'moment/src/locale/fr';
moment.locale('fr')

注意import语句中的src