【问题标题】:How to get late minutes如何获得迟到的分钟数
【发布时间】:2021-03-11 06:41:03
【问题描述】:

我有一个 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-script google-sheets google-sheets-formula


    【解决方案1】:

    解释:

    你们很亲密!

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

    如果您想以分钟为单位获得差异,您需要使用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  }
    }
    

    根据我的数据给我正确的分钟差:

    请注意:

    自定义函数/公式的刷新方式与内置谷歌表格公式不同。您需要更改自定义函数中至少一个参数的值才能对其进行更新。 Here你可以找到更多关于自定义函数的细节。

    【讨论】:

    • 我发现了问题并纠正了它。仍然无法正常工作。我正在共享具有编辑权限的工作表。目标日期和时间通过查询来自另一张工作表,并通过数组公式按票号链接。 docs.google.com/spreadsheets/d/…
    • @arulselvan 我发现了这个问题。您的电子表格的时区为印度,但您的脚本的时区为 GMT-5。时区应该相同。解决方案:切换到旧版编辑器,然后转到 File => Project properties 并将时区更改为 GMT+5:30 India Standard Time。
    • ---我完全被迷惑了。我永远猜不到!非常感谢
    • @arulselvan 很高兴它对您有所帮助。
    猜你喜欢
    • 1970-01-01
    • 2010-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-02
    • 1970-01-01
    • 2016-01-04
    • 2021-01-23
    相关资源
    最近更新 更多