5

我正在试验dayjs. 按照文档中的示例,我在我的 HTML 脚本中进行了设置:

<script src="https://unpkg.com/dayjs@1.10.4/dayjs.min.js"></script>
<script src="https://unpkg.com/dayjs@1.10.4/locale/en-gb.js"></script>

在我的 JS 代码中,我有以下几行:

var locale = dayjs.locale('en-gb');
var date = dayjs('1/4/21').format('DD MMM YYYY');

第一行正确返回locale为“en-gb”。但是,根据 DMY 的标准英式英语日期顺序,当第二行date应该是 '01 Apr 2021' 时返回为 '04 Jan 2021'。

我检查了 en-gb 语言环境文件的日期是否正确。

我该如何纠正这个问题?

编辑

从那以后我发现moment使用moment-with-locales.js.

4

2 回答 2

0

正如 OP 所提到的,在撰写此问题时dayjs或不支持此功能。momentjs

这是该问题的 ES6 解决方案:

// Create this utility function
function formatLocale(dateStr: string) {
  const values = dateStr.split('/');

  // Make sure string is valid
  const isValid = values.length === 3 && values.every(val => val.length > 0);
  if (!isValid) return dateStr; // don't change if date isn't valid (handle error however you want)

  if (dayjs.locale() === 'en-gb')
    return `${values[1]}/${values[0]}/${values[2]}`;
  // otherwise
  return dateStr;
}

// Usage
dayjs(formatLocale('1/4/2022')).format('DD MMM YYYY') // "01 April 2022"

创建一个实用函数formatLocale,可用于检查 的当前语言环境dayjs,如果是"en-gb",它将适当地操作字符串输入以匹配dayjs. 如果语言环境是其他任何东西,或者如果字符串输入无效,那么它将不会操纵输入字符串。

于 2022-01-20T09:40:30.053 回答
0

这可能无法回答问题,因为您具体询问如何使用本地功能解析日期。但我使用自定义解析插件解决了这个问题:

const customParseFormat = require("dayjs/plugin/customParseFormat");
dayjs.extend(customParseFormat);
dayjs("01/04/2021", "DD/MM/YYYY").format("DD MMM YYYY")
于 2021-07-06T18:01:14.540 回答