问题描述
我正在使用 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) // can be ja or 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 文件中,但在长日期和完整日期格式(PPP
和 PPPP
)中是 here。
您要查找的日语格式是 PPP
,它显示的日期如下:
- 中文:2020 年 2 月 15 日
- JA:2020年2月15日
最接近您要查找的格式的是MMM do,yyyy
:
- 中文:2020 年 2 月 15 日
- JA:2020 年 2 月 15 日