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

syqv5f0l  于 2023-02-15  发布在  Java
关注(0)|答案(7)|浏览(278)

我试图写一个脚本,从一个定义的日期减去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

我很困惑为什么日期从六月移到了四月。
谢谢你看了一下

vsaztqbk

vsaztqbk1#

尝试:

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

}
ffscu2ro

ffscu2ro2#

你应该学习更多关于Date.prototype.setDate()的知识,它只会改变一个给定Date示例的**月份的日期。
正如你发布的代码一样,根据控制台的结果,End_Day的月份是4End_day_2.setDate(4 - 5)等于End_day_2.setDate(-1)End_day_2的月份是April,因为April有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
zkure5ic

zkure5ic3#

我很困惑为什么日期从六月移到了四月。
这是因为您将日期设置为今天(End_day_2),而不是预定义的日期(End_day)。
变更

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

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

n1bvdmb64#

如果来自工作表的是字符串,则必须将日期字符串转换为日期对象。
另一件事是你必须在毫秒内工作,就像@vanowm说的那样:
606024*5 = 432 000 * 1 000 = 432 000 000
完全跳过这张纸

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

agyaoht75#

这就可以了,可以处理任何日期,也可以减去任何天数

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

eoigrqb66#

一周前

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;
}
uqxowvwt

uqxowvwt7#

您可以使用Utilities.formatDate()方法从Google App Script中定义的日期减去5天。

function subtractDays() {
  var date = new Date();
  var subtractDays = 5;

  // Subtract 5 days from the current date
  date.setDate(date.getDate() - subtractDays);

  // Format the new date
  var newDate = Utilities.formatDate(date, "UTC", "yyyy-MM-dd");

  Logger.log(newDate);
}

在本例中,我们首先创建一个Date对象来表示当前日期。然后,使用setDate()方法从当前日期减去5天。最后,使用Utilities.formatDate()方法格式化新日期,并使用Logger.log()方法将其记录到控制台。
您可以修改subtractDays变量以从日期中减去不同的天数,也可以使用不同的date对象作为开始。

相关问题