首页 > 解决方案 > 如何获得迟到的分钟数

问题描述

我有一个 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  }
}

它显示错误的分钟数

即使他没有迟到,它也会显示迟到的分钟数。

在此处输入图像描述

标签: google-apps-scriptgoogle-sheetsgoogle-sheets-formula

解决方案


解释:

你很亲近!

  • 问题在于从毫秒到分钟的转换。

如果您想在几分钟内获得差异,您需要使用60*1000

在此处输入图像描述

您的代码以小时为单位。我不确定为什么结果在小时内甚至没有差异,但我的猜测是你还没有刷新自定义公式.

更新:

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

解决方案:

这:

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

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

在此处输入图像描述

请注意:

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


推荐阅读