laydate v5.x 原生不支持 weekStart 配置项;需手动修改源码两处:调整 weeks 数组顺序为 ["一","二","三","四","五","六","日"],并将 getDay() 替换为 (getDay() + 6) % 7 以对齐列索引。
laydate 的 weekStart 配置项是否可用
原生 Layui laydate(v5.x)**不支持** weekStart 这类配置项。官方版本至今未提供该参数,所有“weekStart: 1”或类似写法的示例,均来自社区魔改版(如 laydatePro)或自行 patch 后的代码。直接在标准 layui.all.js 或 laydate.js 中添加该配置,不会生效。
修改 weeks 数组和 getDay() 偏移逻辑
必须手动修改源码才能让日历表头和日期格子真正以周一为起始。关键改动有两处:
- 找到源码中定义
weeks的地方(通常为["日","一","二","三","四","五","六"]),改为["一","二","三","四","五","六","日"] - 找到计算当月 1 号是星期几的逻辑,常见写法是
c.getDay(),需替换为(c.getDay() + 6) % 7,这样周日(0)就映射为第 6 位,周一(1)变成第 0 位
这两处不一起改,会出现表头是“一~日”,但日历格子里 1 号仍落在“日”列下的错位。
为什么不能只靠 CSS 或 ready 回调调整
有人试图在 ready 回调里用 JS 重排 td 顺序,或给列加 transform 平移——这会破坏点击事件绑定、日期高亮、范围选择等交互逻辑。laydate 渲染时已按 getDay() 值硬编码了每个日期对应的列索引,运行时无法安全覆盖。
还有人想用 format: 'yyyy-MM-dd EEE' 在输入框显示“周一”,但这只影响文本输出,不影响面板布局。
当前最稳妥的方案:改 laydate.js 里的渲染逻辑
定位到类似这样的代码块(不同版本位置略有差异):
var weeks = ["日","一","二","三","四","五","六"]; // … var firstDay = new Date(year, month, 1).getDay();
替换成:
var weeks = ["一","二","三","四","五","六","日"]; // … var firstDay = (new Date(year, month, 1).getDay() + 6) % 7;
改完后务必清空浏览器缓存并重新加载资源。如果使用的是 layui.all.js,则需搜索整个文件;若按需加载,则只改 laydate.js 即可。
注意:升级 layui 版本时,这些修改会被覆盖,需重新打补丁。没有配置项的底层限制,意味着每次更新都要人工核对这两处。











