在 JavaScript 的条件函数中更改一个变量参数以保持其他参数不变

问题描述 投票:0回答:0

选举于 2023 年 3 月 14 日举行。变量“FLM23”使用我在网上找到的 nthWeekdayOfMonth 函数设置该日期,该函数计算任何月份的第 n 天作为日期。我想让 AddOneYear 函数首先检查 FLM23 的日期和时间是否早于今天的日期和时间。如果是这样,我希望它使用 nthWeekdayOfMonth 将下一个年度选举日期重新分配给“FLM23”,只需将年份加 1 即可。如果该功能正常工作,它将准确打印“2024 年 3 月 12 日星期二 07:00:00 GMT-0400(东部夏令时)”。

我包括了我尝试过的两种方法,但显然必须注释掉一种方法才能测试脚本。首先,我创建了一个名为 NextYear 的变量,用于 AddOneYear 函数内的 nthWeekdayOfMonth 函数,但我无法简单地更改年份,同时保持 FLM23 的其他参数与其原始变量调用相同。其次,我尝试将 today 变量中的 getFullYear 放在参数中,但这没有用。谢谢你的帮助!

    function print(s) {
      document.write(s + '<br />');
    }
    
    function add(s) {
         s.setHours(s.getHours() + 7);}

    //Attempted Method 1
    function AddOneYear(s) {
        var today = new Date();
        if (s <= today) {
            //The following two lines are causing the issues
            var NextYear = new Date().getFullYear() + 1;
            s = nthWeekdayOfMonth(s, s, new Date(NextYear, s));
        }

    } 

    //Attempted Method 2
    function AddOneYear(s) {
        var today = new Date();
        if (s <= today) {
            //The following line is causing the issues
            s = nthWeekdayOfMonth(s, s, new Date(today.getFullYear() + 1, s));
        }

    } 

    function nthWeekdayOfMonth(weekday, n, date) {
      var count = 0,
          idate = new Date(date.getFullYear(), date.getMonth(), 1);
          idate.setHours(idate.getHours() + 7);
      while (true) {
        if (idate.getDay() === weekday) {
          if (++count == n) {
            break;
          }
        }
        idate.setDate(idate.getDate() + 1);
      }
      return idate;
    }
    
                 // Second Tuesday of March 2023.
    var FLM23 = nthWeekdayOfMonth(2, 2, new Date(2023, 2));
    AddOneYear(FLM23);
    print(FLM23);

javascript function arguments parameter-passing
© www.soinside.com 2019 - 2024. All rights reserved.