计算两个日期之间的月份,以确定它是6个月或超过6个月

时间:2017-03-01 09:33:59

标签: lotus-formula

我有一个莲花笔记数据库。在表单中有一个名为" ServiceDate"和另一个名为" ReadOrEdit"。

的字段

" ServiceDate"字段我需要存储在日期,所以我使用

@Date(@ThisValue)

正确存储日期。

这是方案

如果ServiceDate在6个月内,则ReadOrEdit字段将显示" Editable",如果ServiceDate超过6个月,则ReadOrEdit字段将显示" ReadOnly"。在那一刻,用户还没有定义确切的6个月,所以我假设六个月大致有186(31 * 6)天。

In" ReadOrEdit"字段,我把以下代码

SixMonths := 186;
date := @Now;
calculation := (@Date(date)-@Date(ServiceDate))/((60*60*24) + 1);
result := @If(calculation > SixMonths;"ReadOnly";"Editable");
@If(@IsError(result);"no result";result)

当我向用户提出这种方法时,用户拒绝我的方法。用户认为我不应该使用天来定义6个月和6个月应按月定义,例如,今天是2017年3月1日,也就是2016年9月1日前6个月。如果日期是2016年9月1日至2017年3月1日,则ReadOrEdit字段应显示" Editable"。如果日期早于2016年9月1日,则ReadOrEdit字段应显示" ReadOnly"。

这个website激励我在ReadOrEdit字段中使用@Adjust。我使用以下代码尝试使用@Adjust来查找ServiceDate之前6个月的日期。

sixMonths :=@Date(@Adjust(ServiceDate;0;-6;0;0;0;0));
@If(@IsError(sixMonths);"no result";sixMonths)

当我运行程序时,如果输入的ServiceDate是01/03/2017,则ReadOrEdit字段将显示01/09/2016。由于结果与用户要求相同,我相信我应该在程序中使用@Adjust。我需要考虑的下一件事是如何计算今天和ServiceDate之间的几个月

我在互联网上搜索关于计算两个日期之间的月数的信息不多。我认为代码可能与我建议的代码类似,所以我开始修改代码以满足用户需求。

这是代码

today :=@Now;
sixMonths :=@Date(@Adjust(ServiceDate;0;-6;0;0;0;0));
sixMonthDays := @Abs(@Integer(( @Date(Today) -   @Date(ServiceDate) )));
calculation:=(@Date(today)-@Date(sixMonths));
result := @If(calculation > sixMonthDays;"ReadOnly";"Editable");
@If(@IsError(result);"no result";result)

当我运行程序时,我注意到结果不正确。

这是我的attemtps,结果只显示" ReadOnly"无论日期是在6个月内还是日期超过6个月。

如果输入的ServiceDate是01/03/2017,它会显示" ReadOnly"

如果输入的ServiceDate是28/02/2017,它会显示" ReadOnly"

如果输入的ServiceDate是01/09/2016,它会显示" ReadOnly"

如果输入的ServiceDate是02/09/2016,它会显示" ReadOnly"

如果输入的ServiceDate是02/08/2016,它会显示" ReadOnly"

如果我更改了代码

result := @If(calculation > sixMonthDays;"ReadOnly";"Editable");

result := @If(calculation < sixMonthDays;"ReadOnly";"Editable");

结果仍不正确。

这是我的attemtps,结果只显示&#34;可编辑&#34;无论日期是在6个月内还是日期超过6个月。

如果输入的ServiceDate是01/03/2017,它会显示&#34; Editable&#34;

如果输入的ServiceDate是28/02/2017,它会显示&#34; Editable&#34;

如果输入的ServiceDate是01/09/2016,它会显示&#34; Editable&#34;

如果输入的ServiceDate是02/09/2016,它会显示&#34; Editable&#34;

如果输入的ServiceDate是02/08/2016,它会显示&#34; Editable&#34;

实际上我认为最终结果应该是这样的

如果输入的ServiceDate是01/03/2017,&#34; ReadOrEdit&#34;字段显示&#34;可编辑&#34;

如果输入的ServiceDate是28/02/2017,&#34; ReadOrEdit&#34;字段显示&#34;可编辑&#34;

如果输入的ServiceDate是01/09/2016,&#34; ReadOrEdit&#34;字段显示&#34;可编辑&#34;

如果输入的ServiceDate是02/09/2016,&#34; ReadOrEdit&#34;字段显示&#34; ReadOnly&#34;

如果输入的ServiceDate是02/08/2016,&#34; ReadOrEdit&#34;字段显示&#34; ReadOnly&#34;

我修改了代码,我认为代码中有错误,但我知道哪个部分。我读了这个post,但我没有理解。

感谢有人让我知道我的错误或让我知道如何计算两个日期(今天和ServiceDate)之间的月数,以便我可以设置是可编辑还是只读。非常感谢你。

1 个答案:

答案 0 :(得分:2)

如果我理解你,可以在服务日期后的六个月内编辑某些内容吗?

您可以直接比较日期。

var delta = editor.getContents(); var text = editor.getText(); var justHtml = editor.root.innerHTML; preciousContent.innerHTML = JSON.stringify(delta); justTextContent.innerHTML = text; justHtmlContent.innerHTML = justHtml;

这假定ServiceDate是日期/时间值。

如果ServiceDate小于或恰好在6个月前,则应返回“Editable”,如果ServiceDate超过6个月,则返回“ReadOnly”。 @Today就像@Now,除了它是一个没有时间的日期值。