示例日期格式
使用示例公式执行日期和时间计算。
所需的 Edition
| 适用于 Salesforce Classic 和 Lightning Experience |
| 适用于:所有版本 |
当您使用本主题中的示例公式时,请记住本指导。
- 复制公式时避免语法错误。
-
使用实际日期值替换日期占位符,例如日期字段,例如 CloseDate 或
TODAY()函数。 -
使用实际的日期/时间值替换 date_time 占位符,例如 CreatedDate 或
NOW()。 -
根据需要,用您自己的字段或值替换这些占位符:date_1、date_2、earlier_date、 later_date、start_date、end_date、start_date_time、end_date_time、num_year 和 target_date。
-
- 日期/时间字段注意事项:
-
DAY()、MONTH()和YEAR()等功能需要日期输入。如果您以日期/时间值开头,请先使用DATEVALUE()函数将其转换为日期。例如,DAY( DATEVALUE( date_time ))。
-
查看年是否是闰年
本公式确定一年是否是闰年(即它有 366 天)。对于任何需要每日精度的计算,从计算每日财务利息到跟踪药物剂量,这一逻辑都至关重要。例如,在闰年中,年金额除以 365 会导致每日数据不准确。使用此公式,您可以根据年份将计算分母动态设置为 365 或 366。
OR(
MOD( YEAR( date ), 400 ) = 0,
AND(
MOD( YEAR( date ), 4 ) = 0,
MOD( YEAR( date ), 100 ) != 0
)
)工作方式:
- 当满足两个特定条件之一时,年份是闰年。一个条件是年份完全除以 400(例如 2000 年)。另一个是它可以除以 4,但不能除以 100(例如,2024 是闰年,但 1900 不是)。
MOD()函数计算分部的剩余部分。如果为MOD( Year, 400 ) = 0,表示年份除以 400,没有剩余值。OR()函数会封装整个公式。如果两个条件中的任何一个为真,公式将返回TRUE。
查看日期位于哪个季度
确定特定活动属于哪个会计季度对于销售预测、财务报告或绩效分析等活动至关重要。使用公式计算标准年份、调整后的会计年度的季度 (1-4),甚至将日期与当前季度进行比较。
标准会计年度:如果第 1 季度从 1 月开始,请使用本公式。
CEILING( MONTH ( date ) / 3 )轮班会计年度:如果您的会计年度在一月份以外的月份开始,请使用本公式。调整 –1 值,ADDMONTHS()便与调回与 1 月保持一致所需的月数相匹配。例如,对于 2 月份的开始,所示公式向后移动 1 个月。
CEILING( MONTH ( ADDMONTHS ( date, -1 ) ) / 3)检查日期是否在当前(标准)季度:如果日期与今天属于同一标准季度和年份,请使用本公式返回TRUE。此选项对验证当前季度交易或防止编辑过去记录等情况非常有用。
AND(
CEILING( MONTH( date ) / 3 ) = CEILING( MONTH( TODAY() ) / 3 ),
YEAR( date ) = YEAR( TODAY() )
)工作方式:
- 这些公式中的逻辑将月份数字 (1–12) 除以 3(季度中的月数)。
-
CEILING()函数会将结果向上舍入到最接近的整数。例如:2 月(第 2 个月)除以 3 等于 0.66,四舍五入为 1(第 1 季度)。4 月(第 4 个月)除以 3 等于 1.33,四舍五入为 2(第 2 个季度)。 -
对于转移的会计年度,
ADDMONTHS()实际上将日期向后移动,因此计算与 1 月份的开始时间保持一致。例如,通过减去 1 个月,2 月成为 1 月(周期的开始)。 -
在检查日期是否在当前季度时,公式会验证季度和年份是否匹配
TODAY(),以确保不会错误地将往年第 1 季度的日期标记为当前日期。
查看日期位于一年之中哪个周
按周分组记录是每周销售报告、供应链计划或资源使用跟踪等活动的基本要求。由于不同的组织以不同的方式定义第 1 周,Salesforce 提供了两种方法:ISO 标准(最适合业务报告)和绝对计数(最适合简单的本地化年度进度跟踪)。
ISO 标准周(推荐):使用此公式,使大部分业务报告符合 ISO-8601 标准。周总是从周一开始,包含周四的第一周算作第 1 周。
ISOWEEK( date )简单绝对周数:如果您的组织将第 1 周定义为始终从 1 月 1 日开始,而不管一周中的哪天,请使用本公式。这种方法对于简单的年度计数器非常有用,在这些计数器中,您只是想知道自年初以来已经过了多少 7 天。
CEILING( ( date - DATE( YEAR( date ), 1, 1) + 1) / 7)工作方式:
- ISO 标准逻辑:
ISOWEEK()函数是一个本机工具,它根据 ISO-8601 定义自动计算周数 (1-53)。它自动处理 1 月份开始于前一年的最后一周或 12 月份结束于下一年的第一周的边缘个案。 - 绝对计数逻辑:
- 公式
date - DATE( YEAR( date ), 1, 1) + 1计算一年的“天数”。例如,2 月 1 日是第 32 天。然后,它将天数除以 7,以查找已过去多少周。继续示例:32/7 = 4.57. CEILING()将结果向上舍入到最接近的整数。在这种情况下,4.57 舍入到 5,将 2 月 1 日放在第 5 周。- 因为 365 天不会平均除以 7(365 天 ÷ 7 = 52.14),所以一年中的最后 1 天或 2 天属于部分的第 53 周。
- 公式
查看两个日期是否位于同一月
对于佣金计算、市场活动属性或合并开单等活动,通常需要确定两个事件是否在同一会计或报告期间发生。本公式检查两个特定日期字段(例如,业务机会 CloseDate 和自定义 Invoice_Date__c)是否属于同一日历月。
AND(
MONTH( date_1 ) = MONTH( date_2 ),
YEAR( date_1 ) = YEAR( date_2 )
)您也可以动态应用此逻辑来验证日期是否属于当前月份相对于今天的日期。这种方法对于条件格式化非常有用,例如突出显示本月到期的任务,或者为自动更新的“本月”报表创建公式标记。
AND(
MONTH( date ) = MONTH( TODAY() ),
YEAR( date ) = YEAR( TODAY() )
)
工作方式:
- 该公式使用
MONTH()提取两个日期的数字 (1–12) 并进行比较。 -
它还使用
YEAR()来确保年份匹配。如果没有此步骤,2024 年 1 月的日期与 2023 年 1 月的日期不匹配。 -
AND()函数要求月和年与返回TRUE相同。
查找月份的最后一天
计算一个月的最后一天对于财务和合同管理用例至关重要。常见用例包括设置动态订阅结束日期、确定发票到期日期或报告月底完结的交易。本公式通过从下个月的第一天减去一天来简化处理 28 天、30 天和 31 天月份以及闰年。
ADDMONTHS( DATE( YEAR( date ), MONTH( date ), 1 ), 1 ) - 1工作方式:
- 公式
DATE( YEAR( date ), MONTH( date ), 1 )创建的日期从原始日期字段设置为每月的第一天。 ADDMONTHS( ..., 1 )将“每月 1 日”日期提前一个月。例如,将 1 月 1 日更改为 2 月 1 日。- 从下个月的第一天减去 1 会自动将日期反推到当月的最后一天。此转换会自动正确处理 2 月 28 日/29 日和 30 月 31 日。
将月份显示为字符串,而不是数字
虽然标准日期字段以数字形式显示,例如 01/15/2024,但报告和面向客户的沟通通常需要更精细的格式。本公式将数字月份值转换为其全文名称,例如一月。此转换对于在报价文档、电子邮件模板或市场营销简讯等资源中生成专业标题(例如“1 月 15 日”而不是“1/15”)非常有用。
CASE(
MONTH( date ),
1, "January",
2, "February",
3, "March",
4, "April",
5, "May",
6, "June",
7, "July",
8, "August",
9, "September",
10, "October",
11, "November",
12, "December",
""
)
如果您的组织使用多种语言,请使用您可以翻译的自定义标签替换月份名称。通过这种方法,月份名称根据用户的语言设置动态更新。例如,它对美国用户显示“一月”,对法国用户显示“扬维尔”。
CASE(
MONTH( date ),
1, $Label.Month_of_Year_1,
2, $Label.Month_of_Year_2,
3, $Label.Month_of_Year_3,
4, $Label.Month_of_Year_4,
5, $Label.Month_of_Year_5,
6, $Label.Month_of_Year_6,
7, $Label.Month_of_Year_7,
8, $Label.Month_of_Year_8,
9, $Label.Month_of_Year_9,
10, $Label.Month_of_Year_10,
11, $Label.Month_of_Year_11,
12, $Label.Month_of_Year_12,
""
)
工作方式:
- 该公式使用
MONTH()函数从日期中提取数字月份 (1–12)。 - 然后,
CASE()函数将该数字与定义的列表进行比较。如果月份是 1,则返回第一个值 (" January" 或 $Label.Month_of_Year_1);如果月份是 2,则返回第二个值,以此类推。 - 最后一行 ("") 提供默认值。如果日期字段为空,
CASE()语句会转到此行并返回空文本字符串,确保不会发生错误。
从日期查找并显示一周中的某一天
虽然 Salesforce 以数字形式存储日期(例如 2024-12-25),但外部通信和内部计划通常需要更便于人类阅读的格式。本公式从日期字段中识别一周中的特定日期,并将其转换为文本(例如,“周三”)。对于您想要使用类似“周五快乐!”个性化问候的电子邮件营销模板,此功能非常有用。另一个用例是人员配置报表,因此您可以轻松发现和筛选周末活动。
CASE(
WEEKDAY ( date ),
1, "Sunday",
2, "Monday",
3, "Tuesday",
4, "Wednesday",
5, "Thursday",
6, "Friday",
7, "Saturday",
""
)
如果您的组织使用多种语言,请使用您可以翻译的自定义标签替换当天的名称。通过这种方法,日期名称可以根据用户的语言设置动态更改(例如为西班牙语区域设置显示“Domingo”)。
CASE(
WEEKDAY( date ),
1, $Label.Day_of_Week_1,
2, $Label.Day_of_Week_2,
3, $Label.Day_of_Week_3,
4, $Label.Day_of_Week_4,
5, $Label.Day_of_Week_5,
6, $Label.Day_of_Week_6,
7, $Label.Day_of_Week_7,
""
)
工作方式:
WEEKDAY( date )函数检查日期,并返回 1(周日)到 7(周六)之间的数字。CASE()函数将该数字与值列表进行比较。如果找到 1,将返回第一个值 ("Sunday" 或 $Label.Day_of_Week_1)。如果找到 2,则返回第二个值,以此类推。- 最后一行 (
"") 提供默认值。如果日期字段为空,CASE()语句会转到此行,并返回空文本字符串,而不是错误。
查找某个日期后的一周中的后一天
计算“下周一”或“即将到来的周五”的特定日期对于设置一致的每周计划非常重要。例如,您的支持团队可能在每周五执行质量审计,或者计费周期从周一开始。无论记录的创建日期如何,本公式都会自动计算正确的即将到来的日期。
date + ( target_day - WEEKDAY( date ) +
IF( target_day <= WEEKDAY( date ), 7, 0 ) )
用与您想要的日期对应的数字替换 target_day:1=周日,2=周一,3=周二,4=周三,5=周四,6=周五,7=周六。
工作方式:
- 该公式计算 target_day(您想要的日期)和
WEEKDAY( date )(记录的当前日期)之间的差距。 IF()语句确定目标日期是本周晚些时候,还是下周。- 本周晚些时候:如果今天是周一 (2),并且您希望周五 (6),则数学计算只需 6 - 2 = 4 天。
IF加 0。 - 过去或今天:如果今天是周五 (6),并且您希望周一 (2),则数学是 2 – 6 = –4(意味着周一是 4 天前)。因为目标今天"小于或等于 " ,
IF语句将 7 添加到结果中: –4 + 7 = 3 天之后(下周一 ) 。
- 本周晚些时候:如果今天是周一 (2),并且您希望周五 (6),则数学计算只需 6 - 2 = 4 天。
查找两个日期之间的天数
要衡量效率,例如跟踪销售周期时间(结束日期减去创建日期)或个案解决时间,请计算两个特定事件之间的持续时间。这些公式计算经过的精确天数,或自动标记超过特定时间阈值的记录。
基本持续时间计算:要查找两个特定日期之间的简单天数,请从较晚的日期中减去较早的日期。
later_date — earlier_date检查日期是否在 30 天前发生:您还可以使用日期数学来标记已经过时或过期的记录。例如,使用此公式来识别一个月内没有活动的潜在客户或过期的发票。如果日期在过去相对于今天超过 30 天,则返回TRUE。
( TODAY() - date ) > 30工作方式:
- Salesforce 在内部将日期存储为简单数字(整数)。当您从一个日期减去另一个日期(例如,
later_date - earlier_date)时,Salesforce 会计算这些整数之间的简单差值,并将结果返回为整数天。 - 在第二个公式中,
TODAY() - date从当前系统日期中减去字段的日期,以天数计算记录的年龄。 > 30运算符将该年龄与您的阈值进行比较。如果差值为 31 天或更长,公式将返回TRUE。否则,将返回FALSE。
查找两个日期之间的工作日数
对于跟踪解决支持个案或完结销售业务机会的工作日数等活动,请计算两个日期之间的工作日数(工作日)。与计算周末的简单日期减法不同,本公式确保您只计算周一至周五。
(
5 * FLOOR( ( end_date - DATE( 1900, 1, 8 ) ) / 7 ) +
MIN( 5, MOD( end_date - DATE( 1900, 1, 8 ), 7 ) )
)
-
(
5 * FLOOR( ( start_date - DATE( 1900, 1, 8 ) ) / 7 ) +
MIN( 5, MOD( start_date - DATE( 1900, 1, 8 ), 7 ) )
)
确保 end_date 是较晚的日期,start_date 是较早的日期,以获取正数。
工作方式:
- 该公式计算 end_date 和 start_date 的工作日分数,然后从 end_date 分数中减去 start_date 分数,得到它们之间的工作日数。
- 公式依赖于固定的参考日期:1900 年 1 月 8 日星期一。它使用已知的星期一作为第 0 天的锚。
FLOOR( ( end_date - ... ) / 7 )和FLOOR( ( start_date - ... ) / 7 )计算自参考日期以来经过的整整 7 天周数。公式将此计数乘以 5,以每整周贷记五个工作日。MOD()函数查看整周计算后的剩余天数 (0-6)。MIN( 5, ... )函数将部分周的工作日计数上限为 5,因此周六和周日不会增加周五之后的工作日总数。
查找两个日期之间的月数
订阅管理或合同续订等活动通常需要计算两个日期之间的日历月数。例如,您可能正在确定用于计费或计算员工福利期限的多年协议的持续时间。本公式基于月和年值查找差异,并忽略一个月中的特定日期。
( ( YEAR( later_date ) - YEAR( earlier_date ) ) * 12 ) + (MONTH ( later_date ) - MONTH( earlier_date ) )工作方式:
( YEAR( later_date ) - YEAR( earlier_date ) ) * 12计算两个日期之间的年差,然后乘以 12,将其转换为基准月数。MONTH( later_date ) - MONTH( earlier_date )计算月份数字之间的差值 (1–12)。- 最后,公式将这两个值相加。
将添加到日、月和年到日期
计算未来日期是工作流自动化的重要要求。这些公式动态预测未来日期。例如,将其用于通话后 5 天内设置后续任务截止日期、确定合同到期日期或计算员工的专属计划等活动。
添加天数:要计划短期跟进或截止日期,请将天数直接添加到日期字段。Salesforce 将日期视为整数,因此添加 5 会使日期增加 5 天。
date + 5添加月:对于中期计划,例如季度审查或订阅续订,请使用ADDMONTHS()。此函数比使用简单加法更智能,因为它自动处理不同长度的月份(28、30、31 天)。
ADDMONTHS( date, 1 )添加年份:
将此公式用于计算,例如确定开单的多年协议持续时间或计算员工的福利期限。通过将年数乘以 12,您可以使用ADDMONTHS()逻辑来确保同比计算准确。
ADDMONTHS( date, 12 * num_years )用您想要添加的年数替换 num_year。
闰年:默认情况下,如果您将年份添加到闰年(2 月 29 日),并且未来年份不是闰年,Salesforce 会返回 2 月 28 日。如果您有业务要求,即 2 月 29 日的周年日是 3 月 1 日,这在一些法律合同中很常见,请使用此高级公式。
ADDMONTHS( date, 12 * num_years ) +
IF(
AND(
DAY( date ) = 29,
DAY( ADDMONTHS( date, 12 * num_years ) ) = 28
),
1,
0
)
此逻辑会检查日期是否调整到 28 日,并添加一天将其推送到 3 月 1 日。
工作方式:
date + 5公式仅增加日期的整数值。ADDMONTHS( date, ... )公式添加日历月。将年乘以 12 (12 * num_year) 会将年转换为月,以便函数可以处理它们。- 在闰年公式中,
IF()语句检查两个条件:原始日期是 29 日,计算的未来日期是 28 日。如果两者都为真,则表示系统已针对非闰年进行调整。然后,公式添加 1 天,以将日期前推到 3 月 1 日。
将添加到工作日到日期
根据工作日计算截止日期对于维护服务级别协议 (SLA) 或管理客户期望等活动至关重要。例如,如果支持部门承诺 3 个工作日响应,只需将 3 个日历日添加到周五请求,就会错误地设置周日截止日期(非工作日)。本公式自动调整到期日期以跳过周末,确保请求始终在工作日正确到达。
此示例添加 3 个工作日。
CASE(
WEEKDAY( date ),
4, date + 5,
5, date + 5,
6, date + 5,
7, date + 4,
date + 3
)
要添加不同的天数,请调整 CASE() 语句中的逻辑。例如,以下是 4 个工作日的调整公式。
CASE(
WEEKDAY( date ),
1, date + 4, /* Sunday -> Thursday */
2, date + 4, /* Monday -> Friday */
3, date + 6, /* Tuesday -> next Monday */
4, date + 6, /* Wednesday -> next Tuesday */
5, date + 6, /* Thursday -> next Wednesday */
6, date + 6, /* Friday -> next Thursday */
7, date + 5 /* Saturday -> next Thursday */
)
工作方式:
- 这些公式假设标准周一至周五工作周。它们不考虑特定的假期。公式中的方法将开始日期视为第 0 天,并仅计算未来工作日。
CASE()函数会检查开始日期 (WEEKDAY( date )) 的周几,并添加特定日历天数,以确保结果在有效工作日落地。- 以下是 3 个工作日公式如何处理调整。
- 对于周三 (4)、周四 (5)、周五 (6):添加 3 个工作日会将截止日期强制设置为周末日期。该公式添加 5 个日历日(3 个工作日 + 2 个周末日),以弥补差距。
- 对于周六 (7):如果日期从周六开始,公式会添加 4 个日历日(周日 + 周一/周二/周三)到周三。
- 对于周日 (1)、周一 (2)、周二 (3):对于这些天,添加 3 个工作日不会跨越周末。该公式用作默认个案,并仅添加 3 个日历日。
从日期/时间查找小时、分钟或秒
从日期/时间字段中提取特定时间组件对于细化报表和计划非常重要。一些示例包括标记在工作时间后创建的支持个案,或按一天中的小时分析呼叫量模式,以优化人员配置。这些公式将精确的小时、分钟或秒与时间戳隔离。
- 如果您晚于 GMT,用您晚于 GMT 的小时数除以 24 替换 TZoffset。例如,对于东部时间 (UTC-5),使用 5.0/24 的值。
-
如果您早于 GMT,请使用加号 (+) 更改公式中的减号 (–)。然后,用您提前的小时数除以 24 替换 TZoffset。例如,对于新加坡 (UTC+8),使用 8.0/24 的值。
有关更多信息,请查看在公式中使用日期、日期/时间和时间值中关于日期/时间和时区的备注。
查找时间:使用这些公式将小时提取为数字。这种方法是“一天中的时间”分析的主要方法。
- 24 小时格式 (0–23):最适合计算和排序。
HOUR( TIMEVALUE( date_time - TZoffset ) ) - 12 小时格式 (1–12):最适合面向用户的交互。
IF( OR( HOUR( TIMEVALUE( date_time - TZoffset ) ) = 0, HOUR( TIMEVALUE( date_time - TZoffset ) ) = 12 ), 12, MOD( HOUR( TIMEVALUE( date_time - TZoffset ) ), 12 ) )
查找分钟和秒:使用这些公式提取分钟或秒 (0–59)。此方法对于计算精确持续时间非常有用,例如首次响应时间。
- 分钟:
MINUTE( TIMEVALUE( date_time - TZoffset ) ) - 秒:
SECOND( TIMEVALUE( date_time - TZoffset ) )
确定 AM 或 PM:使用此公式将 AM 或 PM 作为文本字符串返回。此输出在为资源(例如电子邮件模板或报表)构建自定义 12 小时时间戳时非常有用。
IF(
HOUR( TIMEVALUE( date_time - TZoffset ) ) < 12,
"AM",
"PM"
)
将全职显示为字符串 (HH:MM:SS AM/PM):当您希望以抛光的、人类可读的格式显示时间时,例如上午09:05:30,请使用此复合公式。它结合了本节中其他公式的逻辑,并使用 LPAD() 确保小时、分钟和秒值始终显示为两位数(例如,09 而不是 9)。
LPAD( TEXT( IF(
OR(
HOUR( TIMEVALUE( date_time - TZoffset ) ) = 0,
HOUR( TIMEVALUE( date_time - TZoffset ) ) = 12
),
12,
MOD( HOUR( TIMEVALUE( date_time - TZoffset ) ), 12 )
) ), 2, "0" )
& ":" &
LPAD( TEXT( MINUTE( TIMEVALUE( date_time - TZoffset ) ) ), 2, "0" )
& ":" &
LPAD( TEXT( SECOND( TIMEVALUE( date_time - TZoffset ) ) ), 2, "0" )
& " " &
IF( HOUR( TIMEVALUE( date_time - TZoffset ) ) < 12, "AM", "PM" )工作方式:
TIMEVALUE()函数从日期/时间字段中提取时间部分 (HH:MM:SS)。- 减去偏移量(例如,
- 5.0/24)会在提取前将 GMT 时间转换为当地时间。 - 12 小时逻辑:
- 当小时除以 12 时,
MOD(..., 12)函数会计算余数(例如,14 变为 2)。 IF语句处理中午 (12 PM) 和午夜 (0 AM) 的边缘个案,将它们表示为 12,而不是 0。
- 当小时除以 12 时,
LPAD(..., 2, "0")使用前导零填充个位数,确保时间看起来标准(例如,09:05 而不是 9:5)。
查找日期/时间之间运行时间
测量工作流的精确持续时间是性能跟踪所必需的。例如,确定支持个案保持开放状态的确切时间(直到一分钟)有助于强制执行服务级别协议 (SLA)。另一个例子是通过跟踪潜在客户的创建和第一个销售活动之间的时间间隔来突出效率差距。这些公式将此持续时间计算为简单数字或人类可读的文本字符串。
简单天数:如果您以全天计算差异,只需从较晚的日期减去较早的日期。此方法返回一个数字。例如,1.5 代表 1 天和 12 小时)。
later_date - earlier_date格式化经过的时间字符串(天、小时、分钟):要以可读的格式显示持续时间,例如“2 天 4 小时 15 分钟”,请使用本公式。它处理小数点日期差到特定时间单位的转换。
IF(
end_date_time - start_date_time > 0 ,
TEXT( FLOOR( end_date_time - start_date_time ) ) & " days "
& TEXT( FLOOR( MOD( (end_date_time - start_date_time ) * 24, 24 ) ) ) & " hours "
& TEXT( FLOOR( MOD( (end_date_time - start_date_time ) * 24 * 60, 60 ) ) ) & " minutes",
""
)
工作方式:
IF语句确保 end_date_time 实际上是在 start_date_time 之后。如果由于用户错误或数据错误而导致结果是负数,公式将返回空值,而不是混乱的负字符串。FLOOR( end_date_time - start_date_time )获取总差值并隔离整数(整数)来计算全天。MOD( (diff) * 24, 24 )取剩余的小数(部分天数),乘以 24 将其转换为小时数,并隔离不是全天的小时数。MOD( (diff) * 24 * 60, 60 )将差值乘以 1440(一天中的分钟数),得到总分钟数,然后使用MOD在删除完整小时数后查找剩余分钟数。- 最终
FLOOR()会将分钟值保留为整数,并阻止分钟组件舍入到 60。
查找两个日期/时间之间的工作小时数
准确跟踪服务级别协议 (SLA) 通常需要以“工作时间”而不是原始时钟时间来衡量持续时间。例如,考虑一个高优先级支持个案,该个案在周五下午 4:00 到达,并在周一上午 10:00 得到解决。实际经过的时间是 66 小时,但假设计划为 9 到 5 小时,则业务持续时间仅为 2 小时。本公式计算特定业务持续时间,自动排除周末和非工作时间。
ROUND( 8 * (
( 5 * FLOOR( ( end_date_time -
DATETIMEVALUE( "1900-01-08 17:00:00") ) / 7) +
MIN( 5,
FLOOR( MOD( end_date_time -
DATETIMEVALUE( "1900-01-08 17:00:00"), 7) / 1) +
MIN( 1, 24 / 8 * ( MOD( end_date_time -
DATETIMEVALUE( "1900-01-08 17:00:00" ), 1 ) ) )
)
)
-
( 5 * FLOOR( ( start_date_time -
DATETIMEVALUE( "1900-01-08 17:00:00") ) / 7) +
MIN( 5,
FLOOR( MOD( start_date_time -
DATETIMEVALUE( "1900-01-08 17:00:00"), 7) / 1) +
MIN( 1, 24 / 8 * ( MOD( start_date_time -
DATETIMEVALUE( "1900-01-08 17:00:00" ), 1) ) )
)
)
), 2 )工作方式:
- 该公式衡量自固定历史锚点以来经过的工作时间,以计算开始和结束日期的工作时间分数。然后,从结束分数中减去开始分数,以找出差异。
- 该公式依赖于 1900-01-08 的固定参考日期,因为它是周一。此参考允许 5 天工作周的干净计算。
- 时间 17:00:00 与工作日的开始时间一致。该时间对应于格林威治标准时间 5:00 PM,这相当于太平洋时区 (UTC-8) 的 9:00 AM 开始时间。
- 要更改开始时间或时区,通过将时区偏移添加到本地开始时间,以 GMT 计算开始时间。例如,如果您在纽约 (UTC-5),并在上午 9:00 开始,则计算是 9 + 5 = 14。将公式中的
17:00:00替换为 14:00:00。有关更多信息,请查看使用日期、日期/时间和公式中的时间值中的日期/时间和时区的备注。
- 要更改开始时间或时区,通过将时区偏移添加到本地开始时间,以 GMT 计算开始时间。例如,如果您在纽约 (UTC-5),并在上午 9:00 开始,则计算是 9 + 5 = 14。将公式中的
- 该公式将工作日长度定义为 8 小时。24 / 8 分数会按比例调整部分日,以匹配工作日定义。
- 如果您的轮班长度不同,例如 9 小时,请将 8 出现三次更改为适当的数字(例如 9),从而调整公式。重要的是,您不要更改日期字符串中的 08,因为该数字指的是一个月中的某一天。
MIN( 5, ... )逻辑会忽略周六和周日。如果得分超过 5 天(周五),它将限制该值,有效地将时钟暂停到周一。

