在公式中使用日期、日期/时间和时间值
日期公式对于管理付款截止时间、合同账龄或您的组织依赖于时间或日期的任何其他功能都非常有用。
所需的 Edition
| 适用于 Salesforce Classic 和 Lightning Experience |
| 适用于:所有版本 |
日期使用了两种数据类型:日期和日期/时间。一种数据类型“时间”与跟踪时间的日期无关,例如工作时间。处理日期时使用的大部分值都是日期数据类型,存储年、月和日。CreatedDate 等一些字段是日期/时间字段,意味着它们不仅存储日期值,而且还存储时间值(以 GMT 存储,但以用户的时区显示)。当在报表和记录详细信息页面查看时,日期、日期/时间和时间字段以用户的区域设置格式化。时间值的精度以毫秒为单位。日期/时间值的精度以秒为单位。
您可在日期、日期/时间和时间值上使用加和减等运算符,以计算未来日期或两个日期或时间之间的已过去的时间。例如,如果您将一个日期减去另一个日期,由此得出的值将是两个初始值之差(天)(数字数据类型)。两个日期/时间值之间的同一操作将返回十进制值,表示天、小时和分钟数之差。两个时间值之间的相同操作返回毫秒
例如,如果两个日期/时间值之差是 5.52,这意味着两个值分隔 5 天、12 小时(1 天的 0.5)和 28 分钟(1 天的 0.02)。您还可以添加数字值到日期和日期/时间。例如,操作TODAY() + 3会在今天的日期后三天返回。有关详细信息和使用日期的示例,请参阅示例日期公式列表。
在整个示例中,使用了变量日期和日期/时间以代替实际日期和日期/时间字段或值。
请记住,复杂的日期函数倾向于编译为较文本或数字公式函数更大的值,因此您可能会遇到公式编译大小方面的问题。
TODAY()、NOW() 和 TIMENOW()
TODAY() 函数将当前日、月和年返回为日期数据类型。对于希望了解自上一天过去的天数、未来某些天数中的日期或仅仅希望显示当前日期的公式,本函数非常有用。
NOW() 函数返回当前时刻的日期/时间值。当关心当天的特定时间以及日期时,这将非常有用。
TIMENOW() 函数返回的值以 GMT 表示没有日期的当前时间。如果您需要当前小时、分钟、秒或毫秒,请使用此函数,而不是 NOW() 函数。此值对跟踪时间(例如轮班或经过时间)有用
有关如何在日期值和日期/时间值之间转换的详细信息,请参阅在日期/时间和日期之间转换。
DATE() 函数
DATE() 函数返回日期值,给定年、月和日。数字 Y/M/D 值以及 YEAR()、MONTH() 和 DAY() 函数是DATE()的有效参数。例如,DATE( 2013, 6, 1 ) 返回 2013 年 6 月 1 日。同样,假设日期有效(例如,月份介于 1 和 12 之间),DATE( YEAR( TODAY() ), MONTH( TODAY() ) + 3, 1) 返回当前年份中从今天起三个月的第一天的日期值。
如果输入的 Y/M/D 值导致无效日期,DATE() 函数会返回错误,因此错误检查是使用日期值的重要部分。您可在示例日期格式中阅读有关处理无效日期的方法。
在日期/时间和日期之间转换
日期和日期/时间是不可交换的数据类型,因此在日期和日期/时间值之间执行操作时,您需要转换这些值,使它们具有相同的类型。一些函数(例如 YEAR()、MONTH() 和 DAY())也仅适用于日期值,因此必须首先转换日期/时间值。
使用 DATEVALUE( date/time
) 函数返回日期/时间的日期值。例如,要从日期/时间获取年份,请使用 YEAR( DATEVALUE(
date/time ) ) )。
如果公式引用日期/时间字段,但返回日期,时间组件将被忽略,而不会转换为用户的时区。这种行为会导致日期不正确。要更正用户的时区,请使用 DATEVALUE() 函数转换日期/时间字段。
您可以使用 DATETIMEVALUE( date ) 函数将日期值转换为日期/时间。时间将设置为格林威治标准时间 (GMT) 12:00 a.m.,然后转换为用户查看记录时显示的时区。对于位于旧金山的用户,DATETIMEVALUE( TODAY() ) 返回前一天下午 5:00(夏令时),而不是当天凌晨 12:00。有关详细信息,请参阅有关日期/时间和时区的备注。
在日期/时间和时间之间转换
TIMEVALUE() 函数使用 24 小时制返回“HH:MM:SS.MS”(hours:minutes:seconds.milliseconds)格式的时间数据类型值。数字 H/M/S/MS 值以及 HOUR()、MINUTE()、SECONDS() 和 MILLISECONDS() 函数是TIMEVALUE()的有效参数。
使用 TIMEVALUE(value) 函数返回日期/时间类型、文本、合并字段或表达式的时间值。例如,使用 TIMEVALUE(ClosedDate) 从 ClosedDate Date/Time 值中提取时间。
在日期和文本之间转换
如果要将日期作为字符串的一部分包含在内,请将日期值括在 TEXT() 函数中,以将其转换为文本。例如,如果希望将今天的日期转换为文本,使用:
"Today's date is " & TEXT( TODAY() )这将以格式“YYYY-MM-DD”而不是取决于区域设置的格式返回日期。先从日期中提取日、月、年,然后按所需格式重新组合,即可更改公式。例如:
"Today's date is " & TEXT( MONTH( date ) ) & "/" & TEXT( DAY( date ) ) & "/" & TEXT( YEAR( date ) ) ) 您还可以将文本转换为日期,以便将字符串值与您的其他日期字段和公式一起使用。您将希望文本的格式为“YYYY-MM-DD”。使用本公式以返回日期值:
DATEVALUE( "YYYY-MM-DD" )在日期/时间和文本之间转换
您可以使用 TEXT() 函数在字符串中包含日期/时间值,但您需要小心时区。例如,考虑本公式:
"The current date and time is " & TEXT( NOW() )在此公式中,NOW() 偏移为 GMT。通常,NOW()会在查看时转换为用户的时区,但由于转换为文本,转换不会发生。因此,如果您在 8 月 1 日旧金山时间 (GMT-7) 5:00 PM 执行本公式,结果是“The current date and time is 2013–08–02 00:00:00Z”。
当您将日期/时间转换为文本时,末尾会包含“Z”以表示 GMT。如果字段为空,TEXT( date/time ) 会返回“Z”。因此,如果您使用的日期/时间值可能为空,在转换为文本之前检查:
IF(
ISBLANK( date/time ),
"",
TEXT( date/time )
)要将字符串转换为日期/时间值,请使用格式为“YYYY-MM-DD HH:MM:SS”的DATETIMEVALUE()传递字符串。本方法将返回 GMT 的日期/时间值。
在日期和文本之间转换
如果要将时间作为字符串的一部分包含在内,请将时间值括在 TEXT() 函数中,以将其转换为文本。例如,如果您想要将当前时间返回为文本,使用:
"The time is " & TEXT( TIMENOW() )此函数会返回格式为“HH:MM:SS.MS”的时间。
您也可以将文本转换为时间数据类型,以便将字符串值与其他时间字段和公式一起使用。按 24 小时制将文本格式化为“HH:MM:SS.MS”。使用 TIMEVALUE() 函数:
TIMEVALUE("17:30:45.125")有关日期/时间和时区的备注
日期和日期/时间值以 GMT 存储。保存好记录后,字段值将从用户的时区调整为 GMT,然后在记录详细信息页面和报表中显示时调整回查看者的时区。不会因日期转换而造成问题,因为转换日期/时间为日期将导致相同的日期值。
然而,当使用日期/时间和值时,转换始终以 GMT 而不是用户的时区完成。从另一个提取标准日期/时间字段不是一个问题,因为这两个字段都在同一时区。然而,当计算中的一个值从文本或日期值转换为日期/时间值时,结果将不同。
让我们假定旧金山用户在名为 Date_Time_c 的自定义日期/时间字段输入 2013 年 8 月 2 日 12:00 AM 的值。该值存储为 2013–08–02 07:00:00Z,因为太平洋夏令时的时差是 GMT-7。在太平洋时间 8 月 1 日下午 12:00,用户查看记录并运行以下公式:
Date_Time_c - NOW()在计算中,NOW() 是 2013–08–01 19:00:00Z,然后从 2013–08–02 07:00:00Z 中减去,以返回 0.5(12 小时)的预期结果。
假定不使用 NOW(),公式将转换字符串“2013–08–01 12:00:00”为日期/时间值:
Date_Time_c - DATETIMEVALUE( "2013-08-01 12:00:00" )在这种情况下,DATETIMEVALUE(
“2013–08–01 12:00:00” )是 2013–08–01 12:00:00Z,并返回 0.79167 的结果,即 19 小时。
无法在公式中确定用户的时区。如果您的所有用户都在同一时区,则可以通过加或减用户的时区和 GMT 之间的时差以调整时区差别为您的已转换值。然而,由于时区会受夏令时的影响,同时每年的 DST 开始和结束日期都不同,因此很难在公式中管理。我们建议为需要在日期/时间值和文本或日期值之间转换的事务使用 Apex。

