概要

MySQLでは、時間を扱うための型にDATE型やDATETIME型があります。

今回は、このDATE型やDATETIME型をJavaScriptで扱うための方法についてまとめます。

MySQLのDATE型

MySQLのDATE型では、西暦と月と日を表現できます。

形式は、「YYYY-MM-DD」です。

もし、月や日の値が一桁の時は、0を先頭に入れて2桁として表現します。

JavaScriptでこれらを扱う場合、ここでは文字列として表現されているとします。

なので、1987年1月3日の場合は"1987-01-03"という文字列として表現されます。

これをJavaScriptとして比較する場合、先か後かを比べる場合は下記のようにただ比較するだけで良いです。

var a = '1987-01-03';
var b = '2016-10-25';

// true
if (a < b) {
}

しかし、単純に比較するだけでなく、Date型の関数を使った処理を行いたい場合もあると思います。

その場合、そのままJavaScriptのDate型に変換しようとすると、ブラウザによって変換ができたりできなかったりするので、下記のようにハイフンをスラッシュに置き換えてから変換します。

var a = new Date('1987-01-03'.replace(/-/g, '/'));
var b = new Date('2016-10-25'.replace(/-/g, '/'));

// true
if (a < b) {
}

このようにして、MySQLのDATE型を扱います。

MySQLのDATETIME型

MySQLのDATETIME型は、西暦と月と日とさらに時と分と秒を表現できます。

形式は、「YYYY-MM-DD HH:MM:SS」です。

もし、月、日、時、分、秒の値が一桁の時は、0を先頭に入れて2桁として表現します。

DATE型と同じように、JavaScriptでこれらを扱う場合、ここでは文字列として表現されているとします。

なので、1987年1月3日の8時12分7秒の場合は"1987-01-03 08:12:07"という文字列として表現されます。

これをJavaScriptとして比較する場合、先か後かを比べる場合はDATE型と同じようにただ比較するだけで良いです。

var a = '1987-01-03 08:12:07';
var b = '2016-10-25 12:24:00';

// true
if (a < b) {
}

しかし、単純に比較するのではなくDate型の関数を使った処理を行いたい場合はDATE型と同じように置き換えてから変換します。

var a = new Date('1987-01-03 08:12:07'.replace(/-/g, '/'));
var b = new Date('2016-10-25 12:24:00'.replace(/-/g, '/'));

// true
if (a < b) {
}

このようにして、DATETIME型を扱います。

まとめ

MySQLのDATETIME型はを文字列としてそのまま比較する場合は、早いか遅いかの比較しかできず、不便です。

なので、JavaScriptのDate型に変換したいという場合は、とりあえずハイフン(-)をスラッシュ(/)に置き換えた方が良いです。