当前位置: 首页 > 知识库问答 >
问题:

使用google脚本在电子表格中插入两天之间的结果计数天数

公孙高畅
2023-03-14

如何在单元格中输入从特定日期起经过的天数。例如:

列1: 12/05/2013 18:00:00使用函数New Date()的实际天数列2:脚本将插入天数(今天-列1)=4

脚本应在第2列中插入从今天起经过的天数。今天是2013年5月16日23:00,脚本将插入4。如果可能的话,原因是什么?

如果你能帮我,我将不胜感激。

该函数是由friend传递的,但我认为不起作用,因为日期不是以毫秒为单位的,但单元格中的结果应该是天数

    }
    function formatting2(event) {
      var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // get the sheet
      var columnF = sheet.getRange(2, 1, sheet.getLastRow()-1, 1);
      var updateage = sheet.getRange(2, 2, sheet.getLastRow()-1, 1);
      var fValues = columnF.getValues(); // get the values
      var result = new Date();

      updateage.setValue(result-fValues)
    }  

共有1个答案

慕容品
2023-03-14

这是获得所需结果的一种可能方法,我将其作为自定义函数编写,即您必须将其放入单元格中,以便它以=dayToToday()

下面是脚本,其中包含一些日志和注释,用于显示中间值。

function dayToToday(x){
  var sh = SpreadsheetApp.getActiveSheet();
  Logger.log(sh.getActiveCell().getRowIndex())
  var refcell = sh.getRange(sh.getActiveCell().getRowIndex(),1).getValue();;// get value in column A to get the reference date
  var refTime = new Date(refcell);
  var ref = refTime.setHours(0,0,0,0)/(24*3600000);// set hours, minutes, seconds and milliseconds to 0 if necessary and get number of days
  var today = new Date();
  var TD = today.setHours(0,0,0,0)/(24*3600000);// set hours, minutes, seconds and milliseconds to 0 if necessary and get number of days
  var day = parseInt(TD-ref);// get the difference in days (integer value )
  return day ; // return result that will be in cell
}

编辑:如果我理解你的用例,我建议你放弃自定义函数aproach(我从来没有使用过,因为我不太喜欢它),转而使用这个解决方案,它使用计时器触发器和/或菜单来批量更新电子表格中的值...

(ps:抱歉没有足够快的答案...这些天太忙了:-)

function onOpen() {
  var menuEntries = [ {name: "test function", functionName: "toTrigger"},
                     ];
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  ss.addMenu("test menu",menuEntries);//
}

// create a timer trigger that will call "toTrigger" every 15 minutes

function toTrigger(){
  var sh = SpreadsheetApp.getActiveSheet();
  var data = sh.getRange(1,1,sh.getLastRow(),2).getValues();
  for(var n=0;n<data.length;++n){
  if(typeof(data[n][0])=='object'){
    data[n][1]=dayToToday(data[n][0])
      }
    }
   sh.getRange(1,1,sh.getLastRow(),2).setValues(data) 
}




function dayToToday(x){
  var refcell = x;;// get value in column A to get the reference date
  var refTime = new Date(refcell);
  var ref = refTime.setHours(0,0,0,0)/(24*3600000);// set hours, minutes, seconds and milliseconds to 0 if necessary and get number of days
  var today = new Date();
  var TD = today.setHours(0,0,0,0)/(24*3600000);// set hours, minutes, seconds and milliseconds to 0 if necessary and get number of days
  var day = parseInt(TD-ref);// get the difference in days (integer value )
  return day ; // return result that will be in cell
}

第二次编辑:

当使用var data=sh.getRange(1,1,sh.getLastRow(),2). getVales();

getRange中的数字是起始行、起始列、行数、列数,因此必须设置一个包含所需列的范围,然后使用data[n][columnNumber-1]获取相应的值。(-1,因为数组从0开始,列从1开始计数(A实际上是第一列;-))如果需要变量引用,请告诉我,因为必须修改函数以接受2个变量(A ref和另一个)。

最后一次编辑(我希望)

我改变了一些细节。。。参见与J和F对应的[9]和[5]索引

function toTrigger(){
  var sh = SpreadsheetApp.getActiveSheet();
  var data = sh.getRange(1,1,sh.getLastRow(),sh.getLastColumn()).getValues();
  for(var n=0;n<data.length;++n){
  if(typeof(data[n][9])=='object'){
    data[n][5]=dayToToday(data[n][9])
      }
    }
   sh.getRange(1,1,data.length,data[0].length).setValues(data) 
}

更新/编辑

以小时为单位得出结果(根据评论中的请求)

function hoursToToday(x){
  var refcell = x;;// get value in column A to get the reference date
  var refTime = new Date(refcell);
  var refhrs = refTime.getHours();
  var ref = refTime.setHours(refhrs,0,0,0)/3600000;// set hours, minutes, seconds and milliseconds to 0 if necessary and get number of days
  var today = new Date();
  var todayHrs = today.getHours()
  var TD = today.setHours(todayHrs,0,0,0)/3600000;// set hours, minutes, seconds and milliseconds to 0 if necessary and get number of days
  var hrs = TD-ref;// get the difference in days (integer value )
  return hrs ; // return result that will be in cell
}
 类似资料:
  • 问题内容: 我想要一个Java程序来计算两个日期之间的天数。 键入第一个日期(德语表示法;带空格:“ dd mm yyyy”) 输入第二个日期。 该程序应计算两个日期之间的天数。 如何包含include年和夏季? 我的代码: 问题答案: 你正在使用你的字符串进行一些不必要的转换。有一个SimpleDateFormat类-试试这个: 编辑:既然有一些关于此代码的正确性的讨论:它确实照顾care年。但

  • 防止日期保存时间出错 输入是两个对象(没有时间,我知道,但我需要使用实例来实现这一点)

  • 我需要计算JPA中2个日期之间的天数。 例如: 到目前为止,我试着: 你会怎么做?

  • 我想要一个计算两个日期之间天数的Java程序。 键入第一个日期(德语表示法;带空格:“dd-mm-yyyy”) 我如何包括闰年和夏季? 我的代码:

  • 问题内容: 我编写了以下代码来查找两个日期之间的日期 当开始日期和结束日期分别是2/3/2017和3/3/2017时,显示的天数是29.尽管它们是同一天,但显示的是1.(请假的天数。如果请假一天,他必须选择相同的开始日期和结束日期。因此,在这种情况下,他请了两天假。 我究竟做错了什么?感谢您的时间。 注意:请不要使用日期构造函数。检查下面接受的答案。使用simpledateformat或Joda时