即将登陆 Salesforce AppExchange

Salesforce 中的循环日期模式

隔周的周二。每月第 2 和第 4 个周五。每月最后一个周六。这些都是再普通不过的业务规则,而 Salesforce 没有任何字段能表达其中任何一个。

发布于 2026 年 6 月 4 日 · 更新于 2026 年 10 月 21 日 · MultiDatePick

Salesforce 只为事件和任务提供重复功能,仅此而已。一旦您的日程存放在自定义对象上(班次、课程、检查、值班轮换),就只能靠自己了,通常的做法是有人在纸质日历上把日期算出来,再手动逐条录入。

人们说的“循环”其实有两种

这两种经常被混为一谈,但需要的逻辑完全不同。

类型示例需要什么
按间隔每周、每 2 周、每 3 周星期几加上重复间隔
按出现次数第 1 个周一、第 2 和第 4 个周五、最后一个周六每月中的第几次出现

按间隔循环从开始日期往后数,不管月份边界。按出现次数循环每个月重新计算,而“最后一个”很棘手,因为它会因月份不同落在第 4 周或第 5 周。大多数自己写的实现,就栽在这一个词上。

为什么自己写容易出错

每月天数不同

“第 5 个周一”有的月份有,有的月份没有。

闰年

任何假定一年天数固定的计算,都会被它悄悄打乱。

“隔周”需要一个起点

从哪一周开始隔周?两个人的答案很可能不一样。

周末和节假日

可能需要跳过,而您的节假日存放在您自己组织的数据里。

生成得太远

会生成成千上万条没人需要的记录。

单看每一项都不难。加在一起,就是一周的工作量,外加永远修不完的边界情况 bug。

生成日期,而不是存储规则

算法背后还有一个设计决策:是存储规则,在读取时再展开;还是一次性展开,把得到的日期存下来?

在 Salesforce 中,存储日期几乎总是更好的选择。具体的日期记录可以像其他数据一样用于报表、汇总、筛选和驱动自动化。存储的规则则在每个用到的地方都需要解析,而 Salesforce 报表根本无法解析它。代价是修改模式就得重新生成,所以模式选择器应该放在录入的地方,而不是埋在配置里。

屏幕上的三种模式

先说自定义星期几,因为没有任何标准字段能表达它。任意组合工作日,设置间隔,给定范围,日历就会在您保存之前填好所有匹配的日期。

MultiDatePick Salesforce 日期选择器中循环日期模式的动画演示:添加循环模式,选择自定义日期、周五、第 2 和第 4 次出现、三个月后的结束日期,预览六个周五,然后单击“添加日期”,将它们填入双月日历
每月第 2 和第 4 个周五:选择星期和出现次数,预览日期,一次全部添加。
Salesforce 日历的循环模式:自定义星期几,在日期范围内生成日期
自定义星期几:所有匹配的日期都直接生成在日历上。
Salesforce 日历的自定义星期几循环模式选择器,带间隔和日期范围设置
选择器:星期切换按钮、每 N 周的间隔、开始和结束日期。

工作日和周末是大家最常用的两个快捷选项,单击一下即可完成同样的展开。

Salesforce 日历的工作日循环模式:选中日期范围内每个周一至周五
工作日:范围内每个周一至周五。
Salesforce 日历的周末循环模式:选中日期范围内每个周六和周日
周末:每个周六和周日,适合排班和值班。

先让用户看到日期,再确认

循环设置界面能做的最好的事,就是把结果摆出来。用户选择“每 2 周的周二”后,立刻在日历上看到高亮的实际日期,错误就能在保存前那一秒被发现,而不是一周之后。它还能立即平息“从哪一周开始隔周”的争论,因为起点一目了然。

合并也是同样的道理。如果您的循环选择得到连续六周的周一至周五,您可能想要三十条记录,也可能只想要六条,每周一条,带开始和结束日期。在选择时就决定,远比事后迁移省事。

两种都已内置。Date 组件支持自定义周间隔(每 1、2、3 或 N 周)和按月出现次数筛选(第 1 个周一、第 2 和第 4 个周五、最后一个周六)。生成的日期会在保存前显示在日历上,是否将连续日期合并为一条范围记录也只是一项设置。

隔周的周二,单击一次即可

在在线演示中试试循环模式。日期会在您保存之前显示在日历上。

  • $20/用户/月,全部功能
  • 30 天免费试用,无需信用卡
  • 100% Salesforce 原生
  • 无需 Apex
  • 即将登陆 Salesforce AppExchange