代码之家  ›  专栏  ›  技术社区  ›  Pawdrin

Google Sheets getDay()显示的值不正确

  •  1
  • Pawdrin  · 技术社区  · 3 年前

    日期()显示正确的日期,而getDay()显示错误的值。

    function Test()
    {
      const date = new Date();
      const dateToday = Utilities.formatDate(new Date(), "GMT+8", "MM/dd/YYYY");
      const dateYesterday = Utilities.formatDate(new Date(new Date().setDate(date.getDate() - 1)), "GMT+8", "MM/dd/YYYY");
      var day = date.getDay();
      var a = SpreadsheetApp.getActiveSheet().getRange(3, 2);
    
      switch (day)
      {
      case 1:
        day = "Sunday";
        break;
      case 2:
        day = "Monday";
        break;
      case 3:
         day = "Tuesday";
        break;
      case 4:
        day = "Wednesday";
        break;
      case 5:
        day = "Thursday";
        break;
      case 6:
        day = "Friday";
        break;
      case 7:
        day = "Saturday";
      }
    
      a.setValue("Today is " + day + " " + dateToday + ". Yesterday was " + dateYesterday);
    }
    

    当在Google Sheet中执行此代码时,它将输出以下内容: 今天是2022年4月21日星期二。昨天是2022年4月20日

    日期是正确的,而日期显示的是星期二,这是错误的。现在是星期四。

    4 回复  |  直到 3 年前
        1
  •  0
  •   Tanaike    3 年前

    作为另一种方法,在您的情况下,下面的修改如何?

    修改脚本:

    function sample() {
      const date = new Date();
      const dateToday = Utilities.formatDate(new Date(), "GMT+8", "MM/dd/YYYY");
      const dateYesterday = Utilities.formatDate(new Date(new Date().setDate(date.getDate() - 1)), "GMT+8", "MM/dd/YYYY");
      const day = Utilities.formatDate(new Date(), "GMT+8", "EEEE"); // Added
      const a = SpreadsheetApp.getActiveSheet().getRange(3, 2);
      a.setValue("Today is " + day + " " + dateToday + ". Yesterday was " + dateYesterday);
    }
    
    • 在此修改中,使用 Utilities.formatDate 喜欢 Utilities.formatDate(new Date(), "GMT+8", "EEEE") .

    参考:

        2
  •  0
  •   BeRT2me    3 年前

    getDay()方法根据本地时间返回指定日期的星期几,其中0表示星期天。

    星期天是0,星期一是1,以此类推。

    docs

    下面是一个长度较小的实现示例:

    const getDayofWeek = x => x === 0 ? 'Sunday' : x === 1 ? 'Monday' : x === 2 ? 'Tuesday' : x === 3 ? 'Wednesday' : x === 4 ? 'Thursday' : x === 5 ? 'Friday' : x === 6 ? 'Saturday' : "Invalid Day";
    for (i = 0; i < 8; i++) {
      console.log(getDayofWeek(i))
    }
        3
  •  0
  •   Mike Steelson    3 年前

    尝试

    function test() {
      const dayOfTheWeek = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]
      const date = new Date();
      console.log(dayOfTheWeek[date.getDay()])
    }
    

      const dayOfTheWeek = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]
      const date = new Date();
      console.log(dayOfTheWeek[date.getDay()])

    最重要的是在脚本编辑器中检查时区:转到脚本编辑器,在左侧的齿轮上单击,选中第三个框,返回脚本编辑器并在appsscript中查看。json,根据您所在的地区更改时区

        4
  •  0
  •   Cooper    3 年前

    试着这样做:

    function Test() {
      const dt = new Date();
      const dateToday = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "MM/dd/yyyy");
      const dateYesterday = Utilities.formatDate(new Date(dt.getFullYear(), dt.getMonth(), dt.getDate() - 1), Session.getScriptTimeZone(), "MM/dd/yyyy");
      var d = dt.getDay();
      var a = SpreadsheetApp.getActiveSheet().getRange(3, 2);
      var day;
      switch (d) {
        case 0:
          day = "Sunday";
          break;
        case 1:
          day = "Monday";
          break;
        case 2:
          day = "Tuesday";
          break;
        case 3:
          day = "Wednesday";
          break;
        case 4:
          day = "Thursday";
          break;
        case 5:
          day = "Friday";
          break;
        case 6:
          day = "Saturday";
      }
      Logger.log("Today is " + day + " " + dateToday + ". Yesterday was " + dateYesterday)
      a.setValue("Today is " + day + " " + dateToday + ". Yesterday was " + dateYesterday);
    
    }