Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.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
Google apps script 如何熬夜_Google Apps Script_Google Sheets_Google Sheets Formula - Fatal编程技术网

Google apps script 如何熬夜

Google apps script 如何熬夜,google-apps-script,google-sheets,google-sheets-formula,Google Apps Script,Google Sheets,Google Sheets Formula,我有一个a列-由表单(时间戳)填充-用户通过表单进行打孔 D列有一个目标日期 列E有一个目标小时(当他必须达到时) 我想显示他迟到的时间(如果他迟到了-与目标日期和时间相比) 在F列中,我输入了公式=late(A7、D7、E7) 但是,它不能正常工作 function late(rep,asdt,asti) { var asnd=new Date(asdt.getFullYear(),asdt.getMonth(),asdt.getDate(),asti); //var nextday

我有一个a列-由表单(时间戳)填充-用户通过表单进行打孔

D列有一个目标日期 列E有一个目标小时(当他必须达到时)

我想显示他迟到的时间(如果他迟到了-与目标日期和时间相比)

在F列中,我输入了公式
=late(A7、D7、E7)

但是,它不能正常工作

function late(rep,asdt,asti) {
  var asnd=new Date(asdt.getFullYear(),asdt.getMonth(),asdt.getDate(),asti);
  //var nextday = new Date(today.getTime()+(10*3600*1000)); //10 hours from now
  //var asnd=new Date(asdt.getTime() + (asti*60*60*1000));
  if (rep.getTime() > asnd.getTime()){
    return ((rep.getTime()-asnd.getTime())/(60*60*1000));
  } else {  return 0  }
}
它显示错误的分钟数

甚至在他不迟到的时候,它也显示出迟到的分钟数

说明: 你很接近

  • 问题在于从毫秒到分钟的转换
如果要以分钟为单位计算差值,则需要使用
60*1000

您的代码以小时为单位获得差异。我不知道为什么结果在几个小时内没有差异,但我猜你没有刷新自定义公式

更新:

与OP讨论后,第二个问题是电子表格和脚本之间的时区不同。OP更改了脚本的时区,以匹配电子表格的时区,并且此答案中建议的代码有效

解决方案: 这:

根据我的数据以分钟为单位给出正确的差值:

请注意:


自定义函数/公式的刷新方式与内置google表单公式的刷新方式不同。您需要更改自定义函数中至少一个参数的值才能更新它。您可以找到有关自定义函数的更多详细信息。

我发现了问题并进行了更正。但它仍然不起作用。我正在共享具有编辑权限的工作表。目标日期和小时通过查询来自另一张工作表,并通过数组公式通过票证号链接@我发现了问题所在。电子表格的时区为印度,但脚本的时区为GMT-5。时区应该相同。解决方案:切换到传统编辑器,然后转到File=>Project properties,并将时区更改为GMT+5:30印度标准时间。----我完全困惑了。我永远也猜不到!!!谢谢lot@arulselvan很高兴这对你有帮助。
function late(rep,asdt,asti) {
  var asnd=new Date(asdt.getFullYear(),asdt.getMonth(),asdt.getDate(),asti);
  if (rep.getTime() > asnd.getTime()){
    return ((rep.getTime()-asnd.getTime())/(60*1000));
  } else {  return 0  }
}