You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

bootstrap datetimepicker选中周日时如何设置为所属周的周一?

问题原因

Moment.js 默认以周日作为每周的第一天,day(1) 方法获取的是Moment 默认规则下本周的周一。而你的周视图规则是周一到周日,周日在Moment默认规则里会被归到下一周的范围,因此选中周日时调用day(1)会返回下一周的周一。

修复方案

直接替换为Moment的isoWeekday()方法即可,该方法遵循ISO周规则,天然以周一作为每周第一天、周日作为每周最后一天,完全匹配你的展示规则。

修改后的代码如下:

$('#start_date').on('dp.change', function (e) {
    // 优先用事件返回的日期对象,避免手动解析格式出错
    const selectDate = e.date ? e.date : moment($("#start_date").val(), "YYYY-MM-DD");
    const firstDateOfWeek = selectDate.isoWeekday(1).format("YYYY-MM-DD");
    // 直接调用组件方法更新值,同步更新组件内部状态和显示
    $(this).data("DateTimePicker").date(firstDateOfWeek);
});

如果你的Moment版本不支持isoWeekday,也可以用兼容写法,先判断是否为周日再做偏移:

$('#start_date').on('dp.change', function (e) {
    const selectDate = moment($("#start_date").val(), "YYYY-MM-DD");
    // 周日的day()返回0,提前减1天归到上一周再取周一
    const firstDateOfWeek = (selectDate.day() === 0 ? selectDate.subtract(1, 'day') : selectDate).day(1).format("YYYY-MM-DD");
    $("#start_date").val(firstDateOfWeek);
});
注意事项
  • 优先使用dp.change事件返回的e.date对象,不需要手动读取输入框值做格式解析,避免格式不匹配导致的解析错误
  • 直接调用datetimepicker的date()方法赋值,而不是手动修改input的val,可以同步更新组件的弹窗选中状态,避免显示值和实际存储值不一致的问题

内容的提问来源于stack exchange,提问作者john tully

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 18:15:04