# 変数の計算

`${...}`構文で基本的なJavaScriptスクリプトを使用して変数を計算できます。

例えば、タイムスタンプをさまざまな方法でフォーマットする場合などです。Digdagには時間計算用に[Moment.js](http://momentjs.com/)がバンドルされています。

```yaml
timezone: America/Los_Angeles

+format_session_time:
  echo>: '${moment(session_time).format("YYYY-MM-DD HH:mm:ss Z")}'
+format_in_utc:
  echo>: '${moment(session_time).utc().format("YYYY-MM-DD HH:mm:ss")}'
+format_tomorrow:
  echo>: '${moment(session_time).add(1, ''days'').format("LLL")}'
+get_execution_time:
  echo>: '${moment().format("YYYY-MM-DD HH:mm:ss Z")}'
```

## ${json:...}による型付き値の格納

`${...}`プレースホルダーの結果は常に文字列として格納されます。例えば、`items`が配列`[10, 20]`のとき、`${items}`は文字列`[10,20]`を格納します。

型付きの値を格納するには、`${json:...}`プレースホルダーを使用します。このプレースホルダーは単一のJavaScript式を評価し、結果をそのJSON型（文字列、数値、オブジェクト、配列、ブール値、null）で格納します。結果がundefinedの場合はnullとして格納されます。

例えば、以下のタスクは`${json:...}`を使用して、`http>`リクエストのJSONボディで数値と配列を送信します。

```yaml
_export:
  count: 3
  items: [10, 20]

+task:
  http>: https://api.example.com/path
  method: POST
  content:
    count: ${json:count}
    items: ${json:items}
  content_format: json
```

このタスクはボディ`{"count":3,"items":[10,20]}`を送信します。`${count}`と`${items}`では、タスクはボディ`{"count":"3","items":"[10,20]"}`を送信します。

`${json:...}`には以下のルールが適用されます。

- プレースホルダーは値全体でなければなりません。`count is ${json:count}`のように、プレースホルダーをテキストに埋め込んだ値は設定エラーになります。
- マーカーは正確に`${json:`と記述します。`${ json : count }`のようにスペースを含む形式は、通常の`${...}`プレースホルダーとして評価され、構文エラーになります。
- クエリファイルやメール本文など、オペレーターが実行時にレンダリングするファイルは常にテキストです。このようなファイル内の`${json:...}`は評価されず、記述されたとおりに残ります。