You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 04:15:10