0

我有一些客户端代码使用react-intl以用户定义的语言和区域(文化/区域设置)显示货币、语言和日期时间值。除了这些要求之外,我还想在使用长日期和时间格式时显示时区缩写(例如2016 年 2 月 8 日,格林威治标准时间 15:02)。

为此,我尝试使用moment-timezone模块,它似乎在隔离中做正确的事情。但是,我发现在我使用react-intl的应用程序中,同一行代码会生成正确的数据,但日期时间格式错误。

document.write(moment(Date()).tz("Europe/London").format('LLL z'));

预计时间:格林威治标准时间 2016 年 2 月 8 日 20:57

实际时间:格林威治标准时间 2016 年 2 月 8 日晚上 9:04

我的猜测是,这与我没有直接加载en-US local的事实有关,因为使用以下类型的代码作为react-intl库的一部分自动为我加载了时刻。

addLocaleData(en);

var intlData = {
    "locales": ["en-US", "en-GB"],
    "formats": {
        "date": {
            "short": {
                "day": "numeric",
                "month": "long",
                "year": "numeric"
            },
            "longdatetime": {
                "day": "numeric",
                "month": "long",
                "year": "numeric",
                "hour": "numeric", 
                "minute": "numeric"
            }
        },
        "time": {
            "hhmm": {
                "hour": "numeric",
                "minute": "numeric"
            }
        }
    }
};


const provider = <IntlProvider locale="en-GB" {...intlData}><MyApp /></IntlProvider>;

有关的:

4

1 回答 1

1

作为一种临时解决方法,我发现我可以像这样专门为时刻时区设置语言环境

import moment from 'moment-timezone'

moment.locale('en-GB');
于 2016-02-09T02:56:57.933 回答