Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么删除一条线会影响下一条线?_Javascript_Date_Google Apps Script - Fatal编程技术网

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