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

JS set_date_range函数MTD筛选开始日期非当月首日问题求助

问题原因

  • 时区不统一:计算MTD时间范围时使用new Date()获取的是用户本地时区的当前时间,但end_date是解析自表单中存储的PST时区当日日期,两个时区的日期/月份可能存在差异,是导致日期偏移的核心原因。
  • 自定义起始日期未生效:你在MTD分支中计算的当月第一天变量被后续else分支的毫秒数倒推逻辑覆盖,没有实际生效。
  • 天数计算逻辑错误:即使时区统一,dayOfMonth-1的写法也会导致倒推的开始日期少算1天,比如PST日期为8月3日时,当月已过3天,减1后按2天倒推,得到的开始日期就是8月2日而非预期的8月1日。

修复方案

直接复用已解析好的PST日期的Year、Month变量计算当月第一天,调整逻辑让MTD分支的起始日期不被后续倒推逻辑覆盖即可,修改后的完整代码如下:

function set_date_range(date_range_value) {
    // 根据传入值设置时间范围
    // 获取今日日期作为结束日期,注意取PST时区而非本地时区日期
    var today_date_value = document.search_form.today_date.value;
    var Month = today_date_value.substr(0,2);
    var Day = today_date_value.substr(3,2);
    var Year = today_date_value.substr(6,4);
    var end_date = new Date(Year, Month - 1, Day, 0, 0, 0);
    var MilliSeconds = 86400000;
    // 以下3个变量用于计算YTD
    var now = new Date();
    var start = new Date(now.getFullYear(), 0, 0);
    var dayOfYear = Math.floor( (now-start) / MilliSeconds);
    // 提前声明start_date避免作用域问题
    var start_date;

    if (date_range_value == "1week") {
        MilliSeconds *= 7;
    } else if (date_range_value == "30days") {
        MilliSeconds *= 30;
    } else if (date_range_value == "365days") {
        MilliSeconds *= 365;
    } else if (date_range_value == "mtd") {
        // 直接用PST日期的年、月计算当月第一天,避免时区差异
        start_date = new Date(Year, Month - 1, 1, 0, 0, 0);
    } else if (date_range_value == "ytd") {
        start_date = new Date(Year, 0, 1, 0, 0, 0); // 当年1月1日
    }
    
    if (date_range_value == "fromstart") {
        start_date = new Date(2006, 4, 1, 0, 0, 0);     // 硬编码起始日期为2006年5月1日
    } else if(date_range_value != "mtd" && date_range_value != "ytd") {
        // 仅非MTD、非YTD场景走毫秒倒推逻辑
        // 日期为闭区间,所以起始日期要加1天
        var start_date_as_number = end_date.getTime() - MilliSeconds + 86400000;
        start_date = new Date(start_date_as_number);
    }

    document.search_form.from_date.value = format_date(start_date);
    document.search_form.to_date.value = format_date(end_date);

    return true;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 12:45:02