微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

datefns 格式未完全格式化

如何解决datefns 格式未完全格式化

我正在使用 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 显示月份,它将不会显示。您需要 MMMMMMM。比较 JAEN-US

年份

字符仅在日期为长格式时才跟在年份之后。该字符不在 this 文件中,但在长日期和完整日期格式(PPPPPPP)中是 here


您要查找的日语格式是 PPP,它显示的日期如下:

  • 中文:2020 年 2 月 15 日
  • JA:2020年2月15日

最接近您要查找的格式的是MMM do,yyyy

  • 中文:2020 年 2 月 15 日
  • JA:2020 年 2 月 15 日

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。