我正在使用 LotusScript 填充 Lotus Notes 文档中的日期/时间字段。这是我正在使用的代码:
Dim dtItem As NotesItem
Set dtItem = endorsementDoc.GetFirstItem("EndorsementEffectedDate")
Dim paymentDue As NotesDateTime
Set paymentDue = dtItem.DateTimeValue
Call paymentDue.AdjustDay(45)
idoc.PaymentDue = paymentDue.DateOnly
EndorsementEffectedDate 字段是由用户填充的日期/时间字段。我想将 PaymentDue 字段设置为 EndorsementEffectedDate 之后的 45 天。为此,我使用了 NotesDateTime 类的 AdjustDay 方法。
问题是,当我将 PaymentDue 设置为 paymentDue.DateOnly 时,@Month 公式返回月份中的日期而不是月份本身。例如,如果 EndorsementEffectedDate 是 20/04/2023 并且我添加了 45 天,则 PaymentDue 设置为 04/06/2023 但 @Month(PaymentDue) 返回 4.
月份的列公式为
@Month(@TextToTime(@Text(PaymentDue)))
为什么@Month 返回的是日期而不是月份?如何在 LotusScript 中获得正确的月份值?
我检查了 Windows 服务器的日期/时间设置,它们设置正确。
我还尝试使用 Format 函数以“dd/mm/yyyy”格式明确制作日期,但问题仍然存在。
您显示的 lotusscript 代码运行后,是否保存文档?
例如
Call endorsementDoc.save(false, false)
如果你是,那么我认为你的视图列可能已损坏。尝试删除它并使用相同的公式创建一个新列。
@Month 返回真正的月份。但是在以下情况下,您必须检查您在字段中输入的日期格式:
idoc.PaymentDue = paymentDue.DateOnly
您的日期格式(可能)是 MM/DD/YYYY:例如 04/20/2023。加上 45 天后为 06/04/2023。
@Month 根据你的区域设置,返回04。 不要将您的 PaymentDue 存储为字符串,而是存储为真实的日期时间:
idoc.PaymentDue = paymentDue.LSLocalTime
其他可能性:您的 lotuscript 代码以 DD/MM/YYYY 格式在您的机器上运行(并且 PaymentDue 是这种字符串格式)。但是视图是在具有 MM/DD/YYYY 区域设置的服务器上计算的。
您似乎想确保从 EndorsementEffectedDate 中删除时间部分。
这条线做到了,但是...
idoc.PaymentDue = paymentDue.DateOnly
... 将 idoc.PaymentDue 设置为 text 字段。根据DateOnly方法的帮助,它返回一个字符串。
如果您希望它被视为日期,您应该从 paymentDue.DateOnly 实例化另一个 NotesDateTime 对象并将这个新对象分配给 idoc.PaymentDue.