[英]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_Day
是4
, End_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.