日時関数 date-time

日時関数を使用すると、Journey Optimizer 内の値に対して日時操作を実行できます。

NOTE
now() 関数は、パーソナライゼーションエディターでは使用できません。 現在の日時の値には、代わりに getCurrentZonedDateTime() または currentTimeInMillis() を使用します。 詳細情報

日数を追加 add-days

addDays 関数は、増分に正の値を使用し、減分に負の値を使用して、指定された日付を指定された日数で調整します。

構文

{%= addDays(date, number) %}
  • 入力:{%= addDays(stringToDate("2024-11-01T17:19:51Z"),10) %}
  • 出力:2024-11-11T17:19:51Z

時間数を追加 add-hours

addHours 関数は、増分に正の値を使用し、減分に負の値を使用して、指定された日付を指定された時間数で調整します。

構文

{%= addHours(date, number) %}
  • 入力:{%= addHours(stringToDate("2024-11-01T17:19:51Z"),1) %}
  • 出力:2024-11-01T18:19:51Z

分数を追加 add-minutes

addMinutes 関数は、増分に正の値を使用し、減分に負の値を使用して、指定された日付を指定された分数で調整します。

構文

{%= addMinutes(date, number) %}
  • 入力:{%= addMinutes(stringToDate("2024-11-01T17:59:51Z"),10) %}
  • 出力:2024-11-01T18:09:51Z

月数を追加 add-months

addMonths 関数は、増分に正の値を使用し、減分に負の値を使用して、指定された日付を指定された月数で調整します。

構文

{%= addMonths(date, number) %}
  • 入力:{%= addMonths(stringToDate("2024-11-01T17:19:51Z"),2) %}
  • 出力:2025-01-01T17:19:51Z

秒数を追加 add-seconds

addSeconds 関数は、増分に正の値を使用し、減分に負の値を使用して、指定された日付を指定された秒数で調整します。

構文

{%= addSeconds(date, number) %}
  • 入力:{%= addSeconds(stringToDate("2024-11-01T17:19:51Z"),10) %}
  • 出力:2024-11-01T17:20:01Z

年数を追加 add-years

addYears 関数は、増分に正の値を使用し、減分に負の値を使用して、指定された日付を指定された年数で調整します。

構文

{%= addYears(date, number) %}
  • 入力:{%= addYears(stringToDate("2024-11-01T17:19:51Z"),2) %}
  • 出力:2026-11-01T17:19:51Z

経過時間 age

age 関数を使用すると、指定された日付からの経過時間を取得できます。

構文

 {%= age(datetime) %}

日数 age-days

ageInDays 関数は、指定された日付を日数で、つまり指定された日付と現在の日付の間の経過日数を計算します。将来の日付の場合は負の数、過去の日付の場合は正の数になります。

構文

{%= ageInDays(date) %}

currentDate = 2025-01-07T12:17:10.720122+05:30(アジア/コルカタ)

  • 入力:{%= ageInDays(stringToDate("2025-01-01T17:19:51Z"))%}
  • 出力:5

月数 age-months

ageInMonths 関数は、指定された日付を月数で、つまり指定された日付と現在の日付の間の経過月数を計算します。将来の日付の場合は負の数、過去の日付の場合は正の数になります。

構文

{%= ageInMonths(date) %}

currentDate = 2025-01-07T12:22:46.993748+05:30(アジア/コルカタ)

  • 入力:{%=ageInMonths(stringToDate("2024-01-01T00:00:00Z"))%}
  • 出力:12

日付を比較 compare-dates

compareDates 関数は、最初の入力日付を他の入力日付と比較します。 date1 が date2 と等しい場合は 0 を返し、date1 が date2 より前の場合は -1 を返し、date1 が date2 より後の場合は 1 を返します。

構文

{%= compareDates(date1, date2) %}
  • 入力:{%=compareDates(stringToDate("2024-12-02T00:00:00Z"), stringToDate("2024-12-03T00:00:00Z"))%}
  • 出力:-1

ZonedDateTime を変換 convert-zoned-date-time

convertZonedDateTime 関数は、日時を指定されたタイムゾーンに変換します。

構文

{%= convertZonedDateTime(dateTime, timezone) %}
  • 入力:{%=convertZonedDateTime(stringToDate("2019-02-19T08:09:00Z"), "Asia/Tehran")%}
  • 出力:2019-02-19T11:39+03:30[Asia/Tehran]

現在の時刻(ミリ秒) current-time

currentTimeInMillis 関数を使用すると、現在の時刻をエポックミリ秒単位で取得できます。

構文

{%= currentTimeInMillis() %}

日数の差異 date-diff

dateDiff 関数を使用すると、2 つの日付間の差異を日数単位で取得できます。

構文

{%= dateDiff(datetime,datetime) %}
例 - イベントまでの残り日数

次の操作は、今日からプロファイルに保存されている将来の日付(サブスクリプション終了日やイベント日など)までの日数を返します。

code language-sql
{%= dateDiff(getCurrentZonedDateTime(), stringToDate(profile.events.subscriptionEndDate)) %}
実際の例 - 件名のカウントダウン

dateDiff を使用して、メールの件名やコンテンツの動的なカウントダウンを作成します。

code language-handlebars
{% let daysLeft = dateDiff(getCurrentZonedDateTime(), stringToDate(profile.loyalty.expiryDate)) %}
{%#if daysLeft > 0%}
Your points expire in {{daysLeft}} day{%#if daysLeft > 1%}s{%/if%} — use them before they're gone!
{%else%}
Your points have expired.
{%/if%}

出力(例):Your points expire in 7 days — use them before they're gone!

ある月の日付 day-month

dayOfMonth は、その月の日付を表す数値を返します。

構文

{%= dayOfMonth(datetime) %}
  • 入力:{%= dayOfMonth(stringToDate("2024-11-05T17:19:51Z")) %}
  • 出力:5

曜日 day-week

dayOfWeek 関数を使用すると、曜日を取得できます。 ISO-8601 規格に従って、1(月曜日)から 7(日曜日)までの整数を返します。

構文

{%= dayOfWeek(datetime) %}
例 - パーソナライズされたコンテンツでの週末の検出

メールやコンテンツ内でこの関数を使用し、日に基づいてメッセージを適応させます。PQL の比較演算子は = です(== ではなく、単一の等号です)。

code language-handlebars
{%#if dayOfWeek(getCurrentZonedDateTime()) = 6 or dayOfWeek(getCurrentZonedDateTime()) = 7%}
We're closed on weekends — your request will be processed on the next business day.
{%else%}
Our team will get back to you within 24 hours.
{%/if%}
table 0-row-2 1-row-2 2-row-2 3-row-2 4-row-2 5-row-2 6-row-2 7-row-2
Day 返された値
月曜日 1
火曜日 2
水曜日 3
木曜日 4
金曜日 5
土曜日 6
日曜日 7
NOTE
dayOfWeek() は、コンテンツのパーソナライゼーション​用にデザインされています(例:日に基づいてメール本文を適応させる)。 曜日に基づいて​ ジャーニー内で異なるプロファイルをルーティング ​する必要がある場合(例:待機アクティビティで週末をスキップ)、ジャーニーの条件アクティビティで直接使用できるビルトインの「時間条件 → 曜日」オプションを使用します。詳細情報

年間通算日 day-year

dayOfYear 関数を使用すると、通日(1月1日からの通算日数)を取得できます。

構文

{%= dayOfYear(datetime) %}
  • 入力:{%= dayOfYear(stringToDate("2024-03-15T00:00:00Z")) %}
  • 出力:75

秒数の差異 diff-seconds

diffInSeconds 関数は、秒数単位で 2 つの日付間の差異を返します。

構文

{%= diffInSeconds(endDate, startDate) %}
  • 入力:{%=diffInSeconds(stringToDate("2024-11-01T17:19:51Z"), stringToDate("2024-11-01T17:19:01Z"))%}
  • 出力:50

時間数を抽出 extract-hours

extractHours 関数は、指定されたタイムスタンプから時間コンポーネントを抽出します。

構文

{%= extractHours(date) %}
  • 入力:{%= extractHours(stringToDate("2024-11-01T17:19:51Z"))%}
  • 出力:17

分数を抽出 extract-minutes

extractMinutes 関数は、指定されたタイムスタンプから分コンポーネントを抽出します。

構文

{%= extractMinutes(date) %}
  • 入力:{%= extractMinutes(stringToDate("2024-11-01T17:19:51Z"))%}
  • 出力:19
実際の例 - 現在の時間を HH:MM としてのみ表示

extractHoursextractMinutes を組み合わせて、日付、日、年を含めず、時間部分のみをレンダリングします。

code language-handlebars
{% let h = extractHours(getCurrentZonedDateTime()) %}
{% let m = extractMinutes(getCurrentZonedDateTime()) %}
Your appointment is confirmed for {{h}}:{%#if m < 10%}0{%/if%}{{m}}.

出力(例):Your appointment is confirmed for 14:05.

先行ゼロのガード({%#if m < 10%}0{%/if%})は、10 未満の分数が 2 桁で表示されるようにします(例:9 の代わりに 09)。

月数を抽出 extract-months

extractMonth 関数は、指定されたタイムスタンプから月コンポーネントを抽出します。

構文

{%= extractMonths(date) %}
  • 入力:{%=extractMonth(stringToDate("2024-11-01T17:19:51Z"))%}
  • 出力:11

秒数を抽出 extract-seconds

extractSeconds 関数は、指定されたタイムスタンプから秒コンポーネントを抽出します。

構文

{%= extractSeconds(date) %}
  • 入力:{%=extractSeconds(stringToDate("2024-11-01T17:19:51Z"))%}
  • 出力:51

日付を書式設定 format-date

formatDate 関数を使用すると、日時値を書式設定できます。 書式は、有効な Java DateTimeFormat パターンである必要があります。

構文

{%= formatDate(datetime, format) %}

上記の 1 番目のパラメーターが日時属性で、2 番目の値が日付の変換および表示方法を示します。

NOTE
formatDate 関数には、入力として文字列ではなく 日時フィールドタイプ​が必要です。XDM スキーマ内でフィールドが文字列タイプとして保存されている場合は、まず stringToDate()toDateTime() などのコンバージョン関数を使用して、日時に変換する必要があります。以下の例を参照してください。
日付パターンが無効な場合、日付は ISO 標準形式にフォールバックします。
Oracle ドキュメントにまとめられている Java 日付書式設定関数を使用できます。

日時フィールドの書式設定

次の操作では、日時フィールドを MM/DD/YY 形式に書式設定します。

code language-sql
{%= formatDate(profile.timeSeriesEvents._mobile.hotelBookingDetails.bookingDate, "MM/dd/YY") %}
文字列を最初に日付に変換

フィールドが文字列として保存されている場合は、まず stringToDate() を使用して日時に変換してから書式設定する必要があります。

code language-sql
{%= formatDate(stringToDate(profile.person.birthDayAndMonth), "MM/DD/YY") %}
日名を含む完全な日付形式

次の操作は、日名、月名、日年を含む完全な日付形式を返します。

code language-sql
{%= formatDate(profile.person.birthDateTime, "EEEE MMMM dd yyyy") %}

出力:Wednesday January 01 2020

システム時間に基づく動的な日付

現在のシステム時間を書式設定して、動的な日付を生成できます。次の操作は、現在の日付を MM/dd/YYYY 形式で返します。

code language-sql
{%= formatDate(getCurrentZonedDateTime(), "MM/dd/YYYY") %}

出力(2026年1月30日(PT)):01/30/2026

曜日形式

曜日を短い形式で抽出できます。

code language-sql
{%= formatDate(getCurrentZonedDateTime(), "EEE") %}

出力:Sun(日曜日)、Mon(月曜日)、Tue(火曜日)など

小文字の出力の場合は、lowerCase 関数と組み合わせます。

code language-sql
{%= lowerCase(formatDate(getCurrentZonedDateTime(), "EEE")) %}

出力:sunmontue など

コンテキストイベントからのタイムスタンプの書式設定

ジャーニーイベントコンテキスト属性からタイムスタンプを使用する際、次の 2 つの要件が適用されます。

  • タイムスタンプをtoDateTime() で折り返し - コンテキストイベントタイムスタンプは、formatDate() によって日時の値として自動的に認識されません。
  • 数値イベント IDをバックティックで折り返し - イベント IDが数値(例:1697323153)の場合、エクスプレッション パスでバックティックを使用してエスケープする必要があります。そうしないと、エディターで PQL 構文エラーが発生します。
  • {% let %} または {%= %} 構文を使用 - 結果を {% let %} で変数に割り当てて {{varName}} でレンダリングするか、インラインの {%= %} 構文を直接使用できます。
code language-handlebars
{% let appointmentDate = formatDate(toDateTime(context.journey.events.`1697323153`.timestamp), "dd/MM/yyyy HH:mm") %}
{{appointmentDate}}

出力(例):18/03/2026 14:30

CAUTION
一般的なエラー:「mismatched input '(' expecting &lt;EOF>」
このPQL構文エラーは、コンテキストイベントタイムスタンプインライン({%= formatDate(...) %})で formatDate() を使用する際に発生します。最も一般的な原因は、バックティック(`)で折り返されていない数値イベント ID または toDateTime() で最初に折り返されずに formatDate() に直接渡されたタイムスタンプフィールドです。両方の問題を修正するには、上記の例に示す {% let %} 割り当てパターンを使用します。

パターン文字 pattern-characters

一部のパターン文字は類似しているように見えても、異なる概念を表す場合があります。

パターン
意味
例(2023-12-31T10:15:30Z の場合)
y
暦年(標準年)
2023
Y
週ベースの年(ISO 8601)。 年の境界で異なる場合があります。
2024(2023年12月31日(PT)は 2024年の最初の週であるので)
M
年間通算月(1~12 または JanJanuary のようなテキスト)
12 または Dec
m
分(時間)(0~59)
15
d
月間通算日(1~31)
31
D
年間通算日(1~366)
365

日付をロケールサポートの形式にします format-date-locale

formatDate 関数は、日付と時刻の値を、目的のロケールなどの対応する言語に依存する表現にフォーマットするのに使用できます。 書式は、有効な Java DateTimeFormat パターンである必要があります。

構文

{%= formatDate(datetime, format, locale) %}

最初の文字列は日付の属性で、2 番目の値はどのように日付を変換して表示するか、3 番目の値は文字列形式のロケールを表します。

NOTE
日付パターンが無効な場合、日付は ISO 標準形式にフォールバックします。
Oracle ドキュメントにまとめられている Java 日付書式設定関数を使用できます。
Oracle ドキュメントサポートされているロケールにまとめられている書式設定と有効なロケールを使用できます。

次の操作を実行すると、MM/dd/YY 形式(ロケール:FRANCE)で日付が返されます。

{%= formatDate(profile.timeSeriesEvents._mobile.hotelBookingDetails.bookingDate, "MM/dd/YY", "fr_FR") %}

CurrentZonedDateTime を取得 get-current-zoned-date-time

getCurrentZonedDateTime 関数は、タイムゾーン情報を含む現在の日時を返します。

構文

{%= getCurrentZonedDateTime() %}
  • 入力:{%= getCurrentZonedDateTime() %}
  • 出力:2024-12-06T17:22:02.281067+05:30[Asia/Kolkata]

時間数の差異 hours-difference

diffInHours 関数は、時間数単位で 2 つの日付間の差異を返します。

構文

{%= diffInHours(endDate, startDate) %}
  • 入力:{%= diffInHours(stringToDate("2024-11-01T17:19:51Z"), stringToDate("2024-11-01T07:19:51Z"))%}
  • 出力:10

分数の差異 diff-minutes

diffInMinutes 関数を使用すると、分数単位で 2 つの日付間の差異を返すことができます。

構文

{%= diffInMinutes(endDate, startDate) %}
  • 入力:{%= diffInMinutes(stringToDate("2024-11-01T17:19:51Z"), stringToDate("2024-11-01T16:19:51Z"))%}
  • 出力:60

月数の差異 months-difference

diffInMonths 関数は、月数単位で 2 つの日付間の差異を返します

構文

{%= diffInMonths(endDate, startDate) %}
  • 入力:{%=diffInMonths(stringToDate("2024-11-01T17:19:51Z"), stringToDate("2024-08-01T17:19:51Z"))%}
  • 出力:3

日数を設定 set-days

setDays 関数を使用すると、指定された日時の日付を設定できます。

構文

{%= setDays(datetime, day) %}

月の日付を 1 日に設定します。

  • 入力:{%= setDays(stringToDate("2024-11-15T17:19:51Z"), 1) %}
  • 出力:2024-11-01T17:19:51Z

時間を設定 set-hours

setHours 関数を使用すると、日時の時を設定できます。

構文

{%= setHours(datetime, hour) %}
例 - 日時を特定の時間に設定
  • 入力:{%= setHours(stringToDate("2024-11-01T17:19:51Z"), 0) %}
  • 出力:2024-11-01T00:19:51Z
実際の例 - 動的な終了日の X 日前

プロファイルに保存された日付(例:サブスクリプションの有効期限)の X 日前にプロファイルをターゲットにするには、負の値を指定して addDays を使用します。

code language-sql
{%= addDays(stringToDate(profile.subscription.endDate), -7) %}

また、時刻を固定時間(例:午前 9 時)に標準化するには、setHours と組み合わせします。

code language-sql
{%= setHours(addDays(stringToDate(profile.subscription.endDate), -7), 9) %}

日時に to-date-time

ToDateTime 関数は、文字列を日付に変換します。 無効な入力に対する出力として、エポック日付を返します。

構文

{%= toDateTime(string, string) %}
  • 入力:{%=toDateTime("2024-11-01T17:19:51Z")%}
  • 出力:2024-11-01T17:19:51Z

UTC に to-utc

toUTC 関数を使用すると、日時を UTC に変換できます。

構文

{%= toUTC(datetime) %}

日の始まりに切り捨て truncate-day

truncateToStartOfDay 関数を使用すると、指定された日時を、その日の始まり(時刻:00:00)に設定して変更できます。

構文

{%= truncateToStartOfDay(date) %}
  • 入力:{%= truncateToStartOfDay(stringToDate("2024-11-01T17:19:51Z")) %}
  • 出力:2024-11-01T00:00Z

truncateToStartOfQuarter truncate-quarter

truncateToStartOfQuarter 関数を使用すると、日時を四半期の最初の日(例:1月1日、4月1日、7月1日、10月1日)の 00:00 に切り捨てることができます。

構文

{%= truncateToStartOfQuarter(dateTime) %}
  • 入力:{%=truncateToStartOfQuarter(stringToDate("2024-11-01T17:19:51Z"))%}
  • 出力:2024-10-01T00:00Z

truncateToStartOfWeek truncate-week

truncateToStartOfWeek 関数は、指定された日時を、週の始まり(月曜日の 00:00)に設定して変更します。

構文

{%= truncateToStartOfWeek(dateTime) %}
  • 入力:{%= truncateToStartOfWeek(stringToDate("2024-11-19T17:19:51Z"))%} // tuesday
  • 出力:2024-11-18T00:00Z // monday

truncateToStartOfYear truncate-year

truncateToStartOfYear 関数を使用すると、指定された日時を、年の最初の日(1月1日)の 00:00 に切り捨てて変更できます。

構文

{%= truncateToStartOfYear(dateTime) %}
  • 入力:{%=truncateToStartOfYear(stringToDate("2024-11-01T17:19:51Z"))%}
  • 出力:2024-01-01T00:00Z

年間通算週 week-of-year

weekOfYear 関数を使用すると、年の週番号(何週目か)を取得できます。

構文

{%= weekOfYear(datetime) %}
  • 入力:{%= weekOfYear(stringToDate("2024-11-01T17:19:51Z")) %}
  • 出力:44

年数の差異 diff-years

diffInYears 関数を使用すると、年数単位で 2 つの日付間の差異を返すことができます。

構文

{%= diffInYears(endDate, startDate) %}: int
  • 入力:{%=diffInYears(stringToDate("2024-11-01T17:19:51Z"), stringToDate("2019-10-01T17:19:51Z"))%}
  • 出力:5
recommendation-more-help
journey-optimizer-help