在公式中使用日期、日期/時間、時間值
日期公式對於管理付款期限、契約期間或您組織中任何與時間和日期有關的功能而言很有幫助。
必要版本
| 提供版本:Salesforce Classic 與 Lightning Experience |
| 提供版本:所有版本 |
日期有兩種資料類型:「日期」與「日期/時間」。一個資料類型「時間」獨立於追蹤時間的日期,例如營業時間。使用日期時所使用的值大多數為「日期」資料類型,此類型會儲存年、月與日。某些欄位 (例如 CreatedDate) 為「日期/時間」欄位,這表示它們不僅儲存日期值,還儲存時間值 (以 GMT 時區儲存,但以使用者的時區顯示)。當您檢視報告與記錄詳細資料頁面時,「日期」、「日期/時間」及「時間」欄位的格式是採用使用者的地區設定。「時間」值的準確度為毫秒。「日期/時間」值的準確度為秒。
您可以在「日期」、「日期/時間」及「時間」值上進行如加減等運算,來計算未來日期以及兩個日期或時間之間經過的時間。例如,如果您將兩個日期相減,則產生的值會是兩個初始值之間的天數差 (「數字」資料類型)。兩個「日期/時間」值的相同運算會傳回小數值,表示天數、時數與分鐘數的差。兩個「時間」值之間相同的作業傳回毫秒
例如,如果兩個「日期/時間」值的差為 5.52,則表示兩個值中之間相隔 5 天,12 個小時 (一天的 0.5),及 28 分鐘 (一天的 0.02)。您也可以在「日期」和「日期/時間」中加入數值。例如,作業 TODAY() + 3 傳回今天日期後的三天。如需使用日期的詳細資訊與範例,請參閱範例日期公式清單。
在整個範例中使用 date 與 date/time 來取代實際的「日期」與「日期/時間」欄位或值。
請記住,複雜的日期函數編譯後的長度常常比文字或數字公式函數長,所以您可能會碰到公式編譯長度的問題。
TODAY()、NOW() 及 TIMENOW()
TODAY() 函數會將目前的日、月和年傳回為「日期」資料類型。如果您想知道自上個日期後已經過了多少天、在未來某個天數後的日期,或者如果您只是想要顯示目前的日期,此函數很有用。
NOW() 函數傳回目前時刻的「日期/時間」值。如果您想要知道一日的特定時間與日期,此函數很有幫助。
TIMENOW() 函數會傳回 GMT 值,表示不含日期的目前時間。如果您想要目前的小時、分鐘、秒或毫秒,請使用此函數,而非 NOW() 函數。此值有助於追蹤如工作班次或經過時間之類的時間,
如需如何在「日期」值與「日期/時間」值之間轉換的詳細資訊,請參閱在日期/時間與日期之間轉換。
DATE() 函數
DATE() 函數會傳回「日期」值,指定年、月和日。數值 Y/M/D 值以及 YEAR()、MONTH() 和 DAY() 函數是 DATE() 的有效參數。例如,DATE( 2013, 6, 1 ) 會傳回 2013 年 6 月 1 日。同樣地,DATE( YEAR( TODAY() ), MONTH( TODAY() ) + 3, 1) 會傳回當年從今天起算三個月的第一天「日期」值,假設日期有效 (例如,月份在 1 到 12 之間)。
如果輸入的 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 日的 5:00 PM 於舊金山 (GMT-7) 執行此公式,則結果是「目前的日期與時間為 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() 函數中包含 Time 值,將其轉換為文字。例如,如果您想要將今天的日期以文字的格式傳回,請使用:
"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 p.m. PDT,使用者檢視記錄,且下列的公式執行:
Date_Time_c - NOW()在計算中,NOW() 為 2013–08–01 19:00:00Z,然後從 2013–08–02 07:00:00Z 減去,以傳回 0.5 (12 小時) 的預期結果。
假設此公式將字串 “2013–08–01 12:00:00” 轉換為「日期/時間」值,而非 NOW():
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。

