SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 採用情報 ...
技術者募集中

【Javascript】日付チェック

Javascriptで日付チェック、こんな感じでしょうか。
とにかく判定ができればよいという方針で、大雑把に作ってます。

function validateDate(y, m, d)
{
	y = y - 0
	m = m - 1
	d = d - 0
	var dt = new Date(y, m, d)
	return (dt.getFullYear() == y && dt.getMonth() == m && dt.getDate() == d)
}

お決まりの手段です。Dateオブジェクトを作って、そのDateオブジェクトから年月日をもらったとき、最初の年月日と一致するのが正しい年月日です。

時々、空欄をどう扱うか選びたいときがあるので、こういうことをすることもあります。

function validateDate(y, m, d, e)
{
	//まったくの空欄をどう扱うか(空欄のとき第4引数=デフォルトはundefinedが返る)
	if (y == "" && m == "" && d == "") {
		return e
	}
	//以降、入力がある前提のチェック
	y = y - 0; m = m - 1; d = d - 0;
	var dt = new Date(y, m, d)
	return (dt.getFullYear() == y && dt.getMonth() == m && dt.getDate() == d)
}

では、2009/9/9(正しい)や、2010-02-29(間違い)なども判断したいですがどうしましょう。
これはどう?

function validateDateStr(s)
{
	var r = /^(\d+)[\/\-](\d+)[\/\-](\d+)$/
	return validateDate(s.replace(r, "$1"), s.replace(r, "$2"), s.replace(r, "$3"))
}

正規表現で、文字列のお好みの部分を取り出せます。
String.substring()などでは後ろから3文字取得などやりづらいですが、これだととてもコンパクトです♪

phpは何かしらのフレームワークなどを利用することが多く、何度も同じ機能を書くことはあまりないですが、Javascriptは、古い既存システムを修正する際などに、ライブラリ類が何もないことなどよくあり、つい何度も書いてしまいます。

その繰り返しの中で、極限までコンパクト、かつ不具合なし、暗記できて何回でもかけるぐらいのコードにしてやろうと、書くたびに考えます。
プログラムなんて動けばいいものなので、無駄な労力ですが、個人的には、何度も何度も書くというのは好きです。

関連するメモ

コメント