我正在嘗試撰寫一個腳本以從定義的日期中減去 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
我很困惑為什么日期從六月移到四月。
謝謝你看
uj5u.com熱心網友回復:
嘗試:
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)))
}
uj5u.com熱心網友回復:
您應該了解有關Date.prototype.setDate()的更多資訊。它只會更改給定 Date 實體的月份中的哪一天。
正如您發布的代碼,根據控制臺結果,月份的日期End_Day是4,End_day_2.setDate(4 - 5)等于,End_day_2.setDate(-1)月份End_day_2是四月,因為四月有 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
uj5u.com熱心網友回復:
這會成功的。適用于任何日期,可以減去任何天數
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));
};
uj5u.com熱心網友回復:
正如其他帖子已經向您展示的那樣,問題是您擁有的第一個日期是字串而不是日期物件。如果要減去日期,則在這兩種情況下都必須具有日期物件。您必須將日期字串轉換為日期物件。我只是想把它變成文字,而不是向你扔一堆代碼。
uj5u.com熱心網友回復:
我很困惑為什么日期從六月移到四月。
這是因為您將日期設定在今天(End_day_2)而不是您的預定義日期(End_day)。
改變
End_day_2.setDate(End_Day.getDate()-5);
至
End_day.setDate(End_Day.getDate()-5);
console.info(End_day);
uj5u.com熱心網友回復:
我認為對于日期操作,您應該使用穩定的庫,例如Moment.js
這是從當前日期減去 5 天的代碼示例
moment().subtract(5, 'days');
要在您的專案中安裝 moment.js,請使用npm i moment
你也可以使用dayjs
uj5u.com熱心網友回復:
一周前
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;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/481360.html
標籤:javascript 日期 谷歌应用脚本
下一篇:如何獲取日期的新列計數出現次數
