Google 工作表 getDay() 显示不正确的值

Google Sheets getDay() Shows an Incorrect Value

Date() 显示正确的日期,而 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);
}

当这段代码在GoogleSheet执行时,会输出如下: 今天是 2022 年 4 月 21 日星期二。昨天是 04/20/2022

日期是正确的,而星期二是不正确的。现在是星期四。

The getDay() method returns the day of the week for the specified date according to local time, where 0 represents Sunday.

周日为 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))
}

这样试试:

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);

}

尝试

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, 根据你的地区更改时区

作为另一种方法,根据你的情况,做如下修改如何?

修改后的脚本:

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")

参考: