Antd 5.15.2搭配Dayjs 1.11.10时DatePicker无法设周起始为周一
问题解决:Dayjs 1.11.10 搭配 Antd 5.15.2 DatePicker 周起始异常
问题分析
升级Dayjs到1.11.10后,DatePicker周始终从周日开始,回退到1.11.7恢复正常,核心原因是Dayjs 1.11.8+版本对插件加载顺序、locale配置生效逻辑做了调整,原代码的执行顺序导致weekStart:1的配置未正确生效。
解决方案
1. 调整插件引入与locale配置顺序
原代码先设置locale再扩展插件,导致updateLocale的配置无法覆盖默认值。修正顺序为:先扩展所需插件,再设置locale并更新配置:
import dayjs from "dayjs"; import weekday from "dayjs/plugin/weekday"; import updateLocale from "dayjs/plugin/updateLocale"; import "dayjs/locale/en"; // 第一步:扩展所有需要的插件 dayjs.extend(updateLocale); dayjs.extend(weekday); // 第二步:设置全局locale dayjs.locale("en"); // 第三步:更新locale的周起始配置 dayjs.updateLocale("en", { weekStart: 1, });
2. 确保Antd使用配置后的Dayjs实例
Antd的DatePicker默认使用全局dayjs,但如果项目中有多个dayjs实例,需通过ConfigProvider明确传入配置好的实例,避免使用未配置的默认实例:
import { ConfigProvider } from 'antd'; import dayjs from './path-to-your-dayjs-config'; // 导入上述配置的dayjs function RootApp() { return ( <ConfigProvider dayjs={dayjs}> {/* 你的应用组件树 */} </ConfigProvider> ); }
3. 备选方案:直接修改locale的原始配置
如果上述方法仍无效,可尝试直接修改en locale的默认weekStart(绕过updateLocale):
import dayjs from "dayjs"; import weekday from "dayjs/plugin/weekday"; import "dayjs/locale/en"; dayjs.extend(weekday); // 直接修改en locale的配置 const enLocale = require('dayjs/locale/en'); enLocale.weekStart = 1; dayjs.locale(enLocale);
验证逻辑
修改后,可通过以下代码确认配置是否生效:
console.log(dayjs().startOf('week').format('YYYY-MM-DD')); // 输出应为周一的日期,而非周日
内容的提问来源于stack exchange,提问作者Alexsandr
相关产品推荐
相关产品推荐

