日付から年齢を自動計算

日付から年齢を自動計算する方法をご紹介します。

  • ※ 古いブラウザに対応する書き方をしています。

デモ

日付
年齢

サンプルコード

JavaScript

var formObj = '';

/**
 * 数値のゼロ埋め(桁を揃える)
 * @param {number|string} number 対象の数字
 * @param {number} digit 桁数
 * @return {string} ゼロが埋められた数字を返す
 */
var zeroPadding = function(number, digit) {
	var numberLength = String(number).length;

	if (digit > numberLength) {
		return (new Array((digit - numberLength) + 1).join(0)) + number;
	} else {
		return number;
	}
};

/**
 * 日付から年齢に計算
 * @param {number|string} year 年
 * @param {number|string} month 月
 * @param {number|string} day 日
 * @return {number} 年齢を返す
 */
var ageCalculator = function(year, month, day) {
	var dateObj  = new Date(),
	    today    = parseInt('' + dateObj.getFullYear() + zeroPadding(dateObj.getMonth() + 1, 2) + zeroPadding(dateObj.getDate(), 2)),
	    birthday = parseInt('' + year + zeroPadding(month, 2) + zeroPadding(day, 2));

	return parseInt((today - birthday) / 10000);
};

/**
 * 日付から年齢に変換し反映
 * @param {'age'|'date'} mode 年齢だけ反映するかプルダウンの選択肢も年月に合わせたものに反映するか
 */
var changeDate = function(mode) {
	var tYear   = formObj.year,
	    tMonth  = formObj.month,
	    tDays   = formObj.days,
	    selectY = tYear.options[tYear.selectedIndex].value,
	    selectM = tMonth.options[tMonth.selectedIndex].value,
	    selectD = tDays.options[tDays.selectedIndex].value;

	if (mode === 'date') {
		var dateObj = new Date(selectY, selectM, 0);

		tDays.length = 0;

		for (var i = 1, len = dateObj.getDate(); i <= len; i++) {
			tDays.options[i] = new Option(i, i);
		}

		tDays.removeChild(tDays.options[0]);

		tDays.options[selectD > tDays.length ? tDays.length - 1 : selectD - 1].selected = true;
	}

	formObj.age.value = ageCalculator(selectY, selectM, selectD);
};

formObj = document.form1;

// 年の選択変更時
formObj.year.onchange = function() {
	changeDate('date');
};

// 月の選択変更時
formObj.month.onchange = function() {
	changeDate('date');
};

// 日の選択変更時
formObj.days.onchange = function() {
	changeDate('age');
};

HTML

<form action="./" method="post" name="form1" id="form1">
	<table>
		<tr>
			<th>日付</th>
			<td>
				<select name="year">
					<option value="1970">1970</option>
					<option value="1971">1971</option>
					<option value="1972">1972</option>
					<option value="1973">1973</option>
					<option value="1974">1974</option>
					<option value="1975">1975</option>
					<option value="1976">1976</option>
					<option value="1977">1977</option>
					<option value="1978">1978</option>
					<option value="1979">1979</option>
					<option value="1980">1980</option>
					<option value="1981">1981</option>
					<option value="1982">1982</option>
					<option value="1983">1983</option>
					<option value="1984">1984</option>
					<option value="1985">1985</option>
					<option value="1986">1986</option>
					<option value="1987">1987</option>
					<option value="1988">1988</option>
					<option value="1989">1989</option>
					<option value="1990">1990</option>
					<option value="1991">1991</option>
					<option value="1992">1992</option>
					<option value="1993">1993</option>
					<option value="1994">1994</option>
					<option value="1995">1995</option>
					<option value="1996">1996</option>
					<option value="1997">1997</option>
					<option value="1998">1998</option>
					<option value="1999">1999</option>
					<option value="2000">2000</option>
					<option value="2001">2001</option>
					<option value="2002">2002</option>
					<option value="2003">2003</option>
					<option value="2004">2004</option>
					<option value="2005">2005</option>
					<option value="2006">2006</option>
					<option value="2007">2007</option>
					<option value="2008">2008</option>
					<option value="2009">2009</option>
					<option value="2010">2010</option>
					<option value="2011">2011</option>
					<option value="2012">2012</option>
					<option value="2013">2013</option>
					<option value="2014">2014</option>
					<option value="2015">2015</option>
					<option value="2016">2016</option>
					<option value="2017">2017</option>
					<option value="2018">2018</option>
					<option value="2019">2019</option>
					<option value="2020">2020</option>
					<option value="2021">2021</option>
					<option value="2022">2022</option>
					<option value="2023">2023</option>
				</select>年
				<select name="month">
					<option value="
					<option value="
					<option value="
					<option value="
					<option value="
					<option value="
					<option value="
					<option value="
					<option value="
					<option value="
					<option value="
					<option value="
				</select>月
				<select name="days">
					<option value="1">1</option>
					<option value="2">2</option>
					<option value="3">3</option>
					<option value="4">4</option>
					<option value="5">5</option>
					<option value="6">6</option>
					<option value="7">7</option>
					<option value="8">8</option>
					<option value="9">9</option>
					<option value="10">10</option>
					<option value="11">11</option>
					<option value="12">12</option>
					<option value="13">13</option>
					<option value="14">14</option>
					<option value="15">15</option>
					<option value="16">16</option>
					<option value="17">17</option>
					<option value="18">18</option>
					<option value="19">19</option>
					<option value="20">20</option>
					<option value="21">21</option>
					<option value="22">22</option>
					<option value="23">23</option>
					<option value="24">24</option>
					<option value="25">25</option>
					<option value="26">26</option>
					<option value="27">27</option>
					<option value="28">28</option>
					<option value="29">29</option>
					<option value="30">30</option>
					<option value="31">31</option>
				</select>日
			</td>
		</tr>
		<tr>
			<th>年齢</th>
			<td><input type="text" name="age" value="" /></td>
		</tr>
	</table>
</form>

簡単な解説

年月日のプルダウンのonchangeイベントをきっかけに、年と月を基準に正しい日のプルダウンに調整します。
例えば年が1970年、月が2月が選択されていれば、月末は28日までなので、日のプルダウンが28日までの内容になります。

その後、選択されているプルダウンの年月日から、年齢を算出して出力します。

JavaScript逆引きリファレンス一覧へ戻る