我在我们的应用程序的上下文中评估了DateFns和Moment,并发现了似乎是DateFns中的一个重要遗漏。
在Moment中,语言环境支持允许您格式化日期或时间的区域设置正确表示。例如,日期格式" LL"和" L"将为英语语言环境生成以下内容:
November 27, 2017
11/27/2017
以下是西班牙语区域设置:
27 de noviembre de 2017
27/11/2017
请特别注意,在第二个示例中,月份以英语显示在当天之前,而当月则以月份语言显示在西班牙语之前。这正是您希望语言环境代码为您处理的事情。这就是locales在几乎所有日期时间库(C ++,C#,Java,Python等)中的工作方式。
在DateFns中,似乎不是format option for locale-correct long date, short date, time, etc.。他们为使用区域设置提供的示例要求您将特定于区域设置的格式字符串传递给它:
// Represent 2 July 2014 in Esperanto:
var eoLocale = require('date-fns/locale/eo')
var result = format(
new Date(2014, 6, 2),
'Do [de] MMMM YYYY',
{locale: eoLocale}
)
换句话说,我需要知道我支持的每个语言环境的日期/时间格式,这首先取消了语言环境支持的目的。]
我可以使用Javascript的toLocaleString,但随后我的应用程序以两种不同的方式管理语言环境。
是否有某种方式可以打印出来,例如,"短日期"对于特定的语言环境,我没有告诉DateFns该语言环境的格式是什么?
答案 0 :(得分:2)
我使用esm版本的date-fns,你可以使用当下使用的相同类型的格式:
import { format } from 'date-fns/esm'
import { enUS, fr } from 'date-fns/esm/locale'
我将区域设置存储在对象中:
this.dateLocales = { fr: fr, en: enUS }
并使用以下格式:
LT: 'h:mm aa',
LTS: 'h:mm:ss aa',
L: 'MM/DD/YYYY',
LL: 'MMMM D YYYY',
LLL: 'MMMM D YYYY h:mm aa',
LLLL: 'dddd, MMMM D YYYY h:mm aa'
所以你可以这样做:
format(
new Date(2014, 6, 2),
'LL',
{locale: this.dateLocales.fr}
)
这些格式已本地化