Javascript 为什么删除一条线会影响下一条线?
我试图根据给定的日期返回不同的日期,例如一周的第一个星期一、一周的星期五,以及前几周和后几周的日期,这样我就可以计算出我的工资期的开始和结束(对于我的两份工作,每个工作都不同)以及该期间的工资日期 当我删除Javascript 为什么删除一条线会影响下一条线?,javascript,date,google-apps-script,Javascript,Date,Google Apps Script,我试图根据给定的日期返回不同的日期,例如一周的第一个星期一、一周的星期五,以及前几周和后几周的日期,这样我就可以计算出我的工资期的开始和结束(对于我的两份工作,每个工作都不同)以及该期间的工资日期 当我删除Logger.log(“Prev-Monday>”+addDays(pMonday,-7))时 下一行的值将更改。被移除的线路是如何搞乱下面的线路的 我在谷歌应用程序脚本中使用了它,因此我可以轻松地将数据从谷歌日历拉到谷歌工作表中。这也意味着没有额外的库 function test_monda
Logger.log(“Prev-Monday>”+addDays(pMonday,-7))时代码>
下一行的值将更改。被移除的线路是如何搞乱下面的线路的
我在谷歌应用程序脚本中使用了它,因此我可以轻松地将数据从谷歌日历拉到谷歌工作表中。这也意味着没有额外的库
function test_monday(){
var theDate = new Date();
theDate.setDate(16);
theDate.setMonth(5);
theDate.setFullYear(2016);
theDate.setHours(12,0,0,0)
Logger.log(theDate);
var pMonday = new Date();
pMonday = getMonday( theDate ) ;
Logger.log("pMonday: " + pMonday)
Logger.log("Prev Monday > " + addDays(pMonday, -7));
Logger.log("Following Friday > " + addDays(pMonday, 4));
}
function getMonday( date ) {
var day = date.getDay() || 7;
if( day !== 1 )
date.setHours(-24 * (day - 1));
return date;
}
function addDays(d, n){
var date = new Date();
date = d;
var offset = n;
date.setHours(24 * ( offset ));
return date;
}
这一行完全撤销了您在前一行中所做的工作。它说date
与d
是完全相同的实例。这意味着无论何时修改date
(date.setHours(24*offset)
)您也在修改d
。您还可以编写d.setHours(24*offset)
,因为它们的意思相同
如果要创建一个与另一个对象相等的新Date
对象,只需将原始对象传递到Date
构造函数中即可。因此,您可以将函数重写为:
function addDays(d, n) {
var date = new Date(d);
date.setHours(24 * n);
return date;
}
好的,那么当我把一个值传递给一个函数时,它已经被声明了,我把它搞砸了?@ThatChrisGuy没有。每当你传递pMonday
,你都在修改这个值。它仍然是您传入的同一个对象实例,但它表示的日期已更改。您正在向其添加24*偏移量
小时。如果在调用addDays
之前和之后执行console.log(pMonday)
操作,您将了解我的意思。您不是在传递值,而是在传递引用。不是超级一致或清晰,但javascript就是这样:)
function addDays(d, n) {
var date = new Date(d);
date.setHours(24 * n);
return date;
}