javascript - datefns 格式未完全格式化

标签 javascript date-format date-fns

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

年份

仅当日期为长格式时, 字符才会跟在年份后面。此字符在 this 中不存在文件,但它是 here长且完整的日期格式(PPPPPPP)。


您正在寻找的日语格式是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/

相关文章:

javascript - 如何从匹配中仅获取完全匹配的字符串

javascript - bxSlider 不自动工作

javascript - 为什么我在 PhoneGap 中得到非常非常粗略的加速度计测量值?

java - 如何解析 new Date().toString() 的输出

java - 预期异常时避免空 catch block

javascript - 日期-fns |如何格式化为 UTC

javascript - 获取第 N 周第 X 天的日期

javascript - date-fns startOfWeek 和格式 W 之间的差异

javascript - 在 bootstrap 中滚动后如何创建 scrollspy navbar-fixed-top?

Java 8 如何在使用 DateTimeFormatter#format 时排除可选部分