SQL TIMESTAMPとDATEをSequelize DATEとDATEONLYに変換する
TIMESTAMP、DATETIME、DATE、TIMEなどのSQL日付・時刻型がSequelizeのDataTypes.DATE、DataTypes.DATEONLY、DataTypes.TIMEにどのようにマッピングされるかを解説します。
Data Types
詳細な説明
Sequelizeでの日付・時刻型
SQLデータベースにはいくつかの日付/時刻カラム型があり、Sequelizeはそれらを処理するために3つの主要なDataTypesを提供します:DATE(タイムゾーン付き日時)、DATEONLY(時刻なしの日付)、TIME。
マッピング表
| SQL型 | Sequelize DataType | JavaScript型 |
|---|---|---|
TIMESTAMP |
DataTypes.DATE |
Date |
TIMESTAMPTZ |
DataTypes.DATE |
Date |
DATETIME |
DataTypes.DATE |
Date |
DATE |
DataTypes.DATEONLY |
string (YYYY-MM-DD) |
TIME |
DataTypes.TIME |
string (HH:mm:ss) |
created_atとupdated_atの処理
コンバーターは一般的なタイムスタンプカラム名を検出し、Sequelizeの組み込みタイムスタンプ管理を設定します:
CREATE TABLE articles (
id SERIAL PRIMARY KEY,
title VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
生成されるモデルにはtimestamps: trueとフィールド名オーバーライドが含まれます:
{ timestamps: true, createdAt: 'created_at', updatedAt: 'updated_at' }
CURRENT_TIMESTAMPデフォルト
カラムがDEFAULT CURRENT_TIMESTAMPまたはDEFAULT NOW()を持つ場合、コンバーターはそれをdefaultValue: DataTypes.NOWにマッピングします:
created_at: { type: DataTypes.DATE, defaultValue: DataTypes.NOW }
カレンダー日付用のDATEONLY
SQL DATE(時刻コンポーネントなし)はDataTypes.DATEONLYにマッピングされ、JavaScriptでは完全なDateオブジェクトではなくプレーンなYYYY-MM-DD文字列を返します。これは誕生日、イベント日など、タイムゾーンが無関係なカレンダーのみの値に便利です。
ユースケース
イベント管理システムを構築しており、イベントにカレンダー日付(DATE)とログ記録用の正確なタイムスタンプの両方がある場合。正しいSequelize DataTypeを使用することで、適切なシリアライゼーションとタイムゾーン処理が保証されます。