繁体   English   中英

如何从定义的日期减去 5 天 - Google App Script

[英]How to subtract 5 days from a defined date - Google App Script

我正在尝试编写一个脚本以从定义的日期中减去 5 天,但似乎不起作用,这是我的代码:

var End_Day = sheet.getRange(i + 2, 20).getValue();
Logger.log(End_Day);
var End_day_2 = new Date();
End_day_2.setDate(End_Day.getDate()-5);
Logger.log(End_day_2);

结果不仅仅是 - 5天:

11:18:47 AM Info    Sat Jun 04 00:00:00 GMT+08:00 2022
11:18:47 AM Info    Fri Apr 29 11:18:47 GMT+08:00 2022

我很困惑为什么日期从六月移到四月。

谢谢你看

尝试:

var End_Day = sheet.getRange(i + 2, 20).getValue();
var End_day_2 = new Date(End_Day.getTime() - (5 * (1000 * 60 * 60 * 24)))
Logger.log(End_Day);
Logger.log(End_day_2);

功能:

const endDay = sheet.getRange(i + 2, 20).getValue()
const endDay2 = DateFromDaysAgo(endDay, 5)

...

function DateFromDaysAgo(startDate, number) {

  if (typeof startDate === `string`) { startDate = new Date(startDate) }

  return new Date(startDate.getTime() - (number * (1000 * 60 * 60 * 24)))

}

如果来自工作表的内容是字符串,则必须将日期字符串转换为日期对象。

另一件事是你必须在几毫秒内工作,正如@vanowm 所说:

60 60 24*5 = 432000 * 1000 = 432000000

所以完全跳过工作表:

x = new Date
> Fri May 27 2022 11:24:01 GMT-0400 (Eastern Daylight Time)

y = new Date(x - 432000000)
> Sun May 22 2022 11:24:01 GMT-0400 (Eastern Daylight Time)

您应该了解有关Date.prototype.setDate()的更多信息。它只会更改给定 Date 实例的月份中的哪一天

正如您发布的代码,根据控制台结果, End_Day 月份的End_Day4End_day_2.setDate(4 - 5)等于End_day_2.setDate(-1)并且End_day_2的月份是四月,因为有4 月的 30 天, setDate(-1)表示setDate(29) ,所以最后得到的是Apr 29 事情就是这样。

一种正确的方法是减去 5 天的毫秒数。

 function addDays(date, days){ const DAY_IN_MILLISECONDS = 24 * 60 * 60000; return new Date(date.getTime() + days * DAY_IN_MILLISECONDS); } console.log(addDays(new Date(), -5).toString()); // 5 days ago

我很困惑为什么日期从六月移到四月。

这是因为您将日期设置在今天( End_day_2 )而不是您的预定义日期( End_day )。

改变

End_day_2.setDate(End_Day.getDate()-5);

End_Day.setDate(End_Day.getDate()-5);
console.info(End_Day);

这会成功的。 适用于任何日期,可以减去任何天数

const subtractDays = (fromDate, numDays) => {
  if (!(fromDate instanceof Date)) throw 'The first argument must be a date';
  return new Date(new Date().setDate(fromDate.getDate() - +numDays));
};

一周前

function weekago() {
  let dt = new Date();
  dt.setDate(dt.getDate()-7);
  Logger.log(dt);
  return dt;
}

五天前

function fiveago() {
  let dt = new Date();
  dt.setDate(dt.getDate()-5)
  Logger.log(dt);
  return dt;
}

从电子表格单元格中的日期算起五天

function fivefromadateinspreadsheet() {
  const v = SpreadsheetApp.getActiveSheet().getRange("A1").getValue();
  let dt = new Date(v);
  dt.setDate(dt.getDate()-5);//Note that does not return a date it return the numbrer of milliseconds
  Logger.log(dt);
  return dt;
}

我认为对于日期操作,您应该使用像Moment.js这样的稳定​​库

这是从当前日期减去 5 天的代码示例

moment().subtract(5, 'days');

要在您的项目中安装 moment.js,请使用npm i moment

你也可以使用dayjs

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM