LotusScript中@Month函数返回日期而非月份的问题咨询
问题原因分析
你遇到的核心问题是日期字符串的解析格式歧义:
paymentDue.DateOnly返回的是本地化字符串(比如你的场景中是04/06/2023),当你把这个字符串赋值给日期/时间字段PaymentDue时,Notes 默认会按美式日期格式(mm/dd/yyyy)解析它。因此04/06/2023被错误识别为4月6日,而非你预期的6月4日,这就导致@Month(PaymentDue)返回4。- 后续用
@Text(PaymentDue)再转时间的操作,本质是基于错误解析后的日期处理,所以结果依然错误。
解决方案
1. 优先直接赋值NotesDateTime对象(推荐)
不要将日期转成字符串赋值,直接把调整后的NotesDateTime对象赋值给字段,Notes会保留正确的日期时间值,完全避免格式解析问题:
Dim dtItem As NotesItem Set dtItem = endorsementDoc.GetFirstItem("EndorsementEffectedDate") Dim paymentDue As NotesDateTime Set paymentDue = dtItem.DateTimeValue Call paymentDue.AdjustDay(45) ' 直接赋值NotesDateTime对象,而非字符串 Set idoc.PaymentDue = paymentDue
此时列公式无需额外转换,直接用@Month(PaymentDue)就能返回正确的月份(比如6)。
2. 若必须用字符串赋值,使用无歧义的ISO格式
如果因特殊需求必须用字符串赋值,要采用yyyy/mm/dd的ISO格式,这种格式不会引发解析歧义:
idoc.PaymentDue = Format(paymentDue.LSLocalTime, "yyyy/mm/dd")
3. 在LotusScript中直接获取正确月份
如果你需要在LotusScript代码内获取调整后的月份,直接调用NotesDateTime对象的Month属性即可,它返回1-12的数字月份:
Dim targetMonth As Integer targetMonth = paymentDue.Month ' 6月将返回6
内容的提问来源于stack exchange,提问作者Adrian Marikar
相关产品推荐
相关产品推荐

