首页 > 解决方案 > Google表格脚本日期比较未返回预期结果

问题描述

我为 Google Script Editor 编写了这两个函数,以将其扩展到工作表中,以确定事件是否应在上次发生时给出,以及它应该发生的频率。

例如,需要一天服两次药,最后一次服药时间是 2020 年 3 月 29 日 12:00,所以如果现在时间是 2020 年 3 月 30 日 01:00,函数需要返回“Due”,因为它是到期后的一个小时,即 2020 年 3 月 30 日 00:00。

我得到的结果不是我在调用“IsDue”时所期望的。我是否正确地将日期/时间与现在进行比较?

function ReturnFrequencyInDays( unit, quantity)  {
  switch(unit) {
    case "Hours":
      return quantity/24;
      break;
    case "Days":
      return quantity;
      break;
    case "Weeks":
      return quantity * 7;
      break;
    case "Months":
      return quantity * 30;
      break;
    case "Years":
      return quantity * 365;
      break;
    default:
      return "Invalid unit";
  }
}


function IsDue(how_often,unit,every,last_occurance){
  var currentTime=new Date();
  if (((ReturnFrequencyInDays(unit,every)/how_often) + last_occurance )<=currentTime) {
    return "Due";
  } else {
    return "Not Due";
  }
}

标签: javascriptdatetimegoogle-apps-scriptgoogle-sheets

解决方案


您需要提供更多关于您希望该功能做什么的解释。但是我从您的术语中假设您尝试将天数与此处的日期进行比较:

var currentTime = new Date();
    if(((ReturnFrequencyInDays(unit,every)/how_often) + last_occurance)<= currentTime){
    return "Due";
  }

那是行不通的。您可以使用 valueOf() 或 getMilliseconds() 方法从参考日期获取毫秒数,然后将它们转换为天数,但我猜这也不是您真正想要的。因此,为了获得更好的答案,请更好地解释预期用途以及您打算如何调用这些函数。


推荐阅读