我正在使用react和datefns。
我有以下代码
import { enUS, ja } from 'date-fns/locale';
import { format, isValid, parseISO } from 'date-fns';
export const getDateLocal = (locale?: string) => {
switch (locale) {
case 'ja':
return ja;
case 'en':
default:
return enUS;
}
};
export const localizedDateFormatter = (
date: Date | number | string,
dateFormat = 'MMM dd',
locale = 'en'
): string => {
const dateIsIso = typeof date === 'string' ? isValid(parseISO(date)) : false;
if (!date || (!dateIsIso && !isValid(date))) {
return '-';
}
return format(new Date(date), dateFormat, { locale: getDateLocal(locale) });
};
我这样称呼这个函数
localizedDateFormatter(hoverFrom, 'MMM dd, yyyy', i18n.language)//可以是 ja 或 en
问题是,日期没有像我想要的那样转换。
ja: 12月 15, 2020
en: Dec 15, 2020
虽然应该如此
ja: 2020年1月13日 (or at least 1月13日, 2020年)
en: Dec 15, 2020
为什么会这样?
最佳答案
免责声明
我对日语一无所知,所以我可以只看源代码给出答案,但也许一些日语使用者可以给出更准确的答案。
您可以在此处查看语言环境源代码 https://github.com/date-fns/date-fns/tree/master/src/locale/ja/_lib ,但这里有一些我设法发现的见解。
白天
日
字符遵循其序数形式的日期(它似乎也是星期日的名称)。看here 。所以你需要do
(一个月中的第几天)。
月
显示月份名称(缩写或完整)时,月
字符位于月份编号之后。因此,如果您使用 M
显示月份,它就不会显示。您需要 MMM
或 MMMM
。比较 JA与 EN-US .
年份
仅当日期为长格式时,年
字符才会跟在年份后面。此字符在 this 中不存在文件,但它是 here长且完整的日期格式(PPP
和 PPPP
)。
您正在寻找的日语格式是PPP
,它显示的日期如下:
- EN:2020 年 2 月 15 日
- JA:2020年2月15日
您可以找到的最接近的格式是MMM do, yyyy
:
- EN:2020 年 2 月 15 日
- JA:2020年2月15日
关于javascript - datefns 格式未完全格式化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65699256/