AWS AppSyncでAWSDateTime型を使って日時を扱う

2019.04.14

スキーマ定義

日時を扱うためにはAWSDateTime型を利用する。

GraphQLのスキーマでは以下のように使用できる。

type Post {
	id: ID
	title: String!
	content: String!
	createdAt: AWSDateTime!
}

リゾルバーで値を自動的にセットする

例えば上のスキーマで、createdAtに投稿日時を自動的に登録したい場合はリクエストマッピングテンプレートに以下のように書くことで実現できる。

#set($nowISO8601 = "${util.time.nowISO8601()}")
{
    "version" : "2017-02-28",
    "operation" : "PutItem",
    "key" : {
        "id": $util.dynamodb.toDynamoDBJson("$util.autoId()"),
    },
    "attributeValues" : {
        "title": $util.dynamodb.toDynamoDBJson("$ctx.args.input.title"),
        "content": $util.dynamodb.toDynamoDBJson("$ctx.args.input.content"),
        "createdAt": $util.dynamodb.toDynamoDBJson("$nowISO8601"),
    }
}

DynamoDBに格納された後の値

AWSDateTime型で宣言した属性は、DynamoDBには 2019-04-11T04:59:22.088Z のような形式で保存される。

JavaScriptから利用するには、これをそのままDateクラスの引数に渡せばよい。

new Date('2019-04-11T04:59:22.088Z')
// => Thu Apr 11 2019 13:59:22 GMT+0900 (日本標準時)