如何使用 date-fns 将 MMM/yyyy 格式的日期恢复为 yyyy-MM 格式

How to get back a date formatted in MMM/yyyy format to yyyy-MM format with date-fns

我想获取格式为 MMM / yyyy 的日期字符串的值,用于 yyyy-MM 格式。例如 abr/2017 我想 return 2017-04 我写了下面是 date-fns 库的代码,但是没有用,它是 returning me 2017-01

import format from 'date-fns/format';
import ptBR from 'date-fns/locale/pt-BR';

format(new Date('abr/2017'),'yyyy-MM', { locale: ptBR })

*** 重要...我想使用语言环境 pt-BR

你首先需要做的是将'abr/2017'解析为一个日期。在声明中:

format(new Date('abr/2017'),'yyyy-MM', { locale: ptBR })

首先计算表达式 new Date('abr/2017'),因此它由 Date 构造函数使用主机的内置解析器解析,这几乎肯定 returns 是一个无效日期。所以之后的任何东西都没什么用。

您需要使用 date-fns 解析字符串,例如:

let date = dateFns.parse('abr/2017','MMM-yyy',new Date(), {locale:'pt-BR'});

但是我不知道如何告诉 date-fns 使用葡萄牙语进行解析。我在 npm.runkit 的测试无法加载 pt-BR。

一旦你有了一个日期,你就可以使用 date-fns.

格式化它

PS:不幸的是,ECMA-402 将术语“locale”与“language”混淆了,这个用词不当已被许多库采用。语言代码“pt-BR”代表一种语言,而不是语言环境,因此使用它的上下文通常不清楚。

更合适的语言环境用于 IANA 代表位置,例如 'America/Sao_Paulo',但是当它们实际上是代表一组历史性 UTC 偏移更改(例如本地标准)的位置时,它们现在被错误地命名为“时区”时间和夏令时(称为 "representative locations" by IANA)。