///////////////////////////////////////////////////////////////////////////////
//  DateSub.js
///////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////
// 関数名	:IsRangeDay
// 機能		:指定日が指定範囲内か判定する
// 返り値	:true : 範囲内　false : 範囲外
// 引き数	:sdt - (入)範囲開始日付
//		 edt - (入)範囲終了日付
//		 tdt - (入)チェック対象日付
// 機能説明	:なし
// 備考		:広域関数
function IsRangeDay(sdt, edt, tdt) {
	return(sdt <= tdt && edt >= tdt);
}
///////////////////////////////////////////////////////////////////////////////
// 関数名	:DayOfYear
// 機能		:指定日付の年間通算日を求める
// 返り値	:年間通算日（１月１日が０）
// 引き数	:dt - (入)日付
// 機能説明	:なし
// 備考		:なし
function DayOfYear(dt) {
	tdt = new Date(dt.getFullYear(), dt.getMonth(), dt.getDate());
	sdt = new Date(tdt);
	sdt.setMonth(0);
	sdt.setDate(1);
	return(parseInt((tdt.getTime() - sdt.getTime()) / 60 / 60 / 24 / 1000));
}
///////////////////////////////////////////////////////////////////////////////
// 関数名	:DateToYearAD
// 機能		:日付から西暦年度を求める
// 返り値	:西暦年度
// 引き数	:dt - (入)日付
// 機能説明	:なし
// 備考		:なし
function DateToYearAD(dt) { 
	rv = dt.getFullYear();
	if (dt.getMonth() < 3) { rv--; }
	return(rv);
}
///////////////////////////////////////////////////////////////////////////////
// 関数名	:GetYearADLastDate
// 機能		:指定日付の年度末日を求める
// 返り値	:年度末日
// 引き数	:dt - (入)日付
// 機能説明	:なし
// 備考		:なし
function GetYearADLastDate(dt) {
	if (dt.getMonth() >= 3) {
		return(new Date(dt.getFullYear() + 1, 2, 31));
	} else {
		return(new Date(dt.getFullYear(), 2, 31));
	}
}
///////////////////////////////////////////////////////////////////////////////
// 関数名	:GetYearADStartDate
// 機能		:指定日付の年度開始日を求める
// 返り値	:年度開始日
// 引き数	:dt - (入)日付
// 機能説明	:なし
// 備考		:なし
function GetYearADStartDate(dt) {
	if (dt.getMonth() >= 3) {
		return(new Date(dt.getFullYear(), 3, 1));
	} else {
		return(new Date(dt.getFullYear() - 1, 3, 1));
	}
}
///////////////////////////////////////////////////////////////////////////////
// 関数名	:DayOfYearAD
// 機能		:日付から西暦年度の年度通算日を求める
// 返り値	:年度通算日（４月１日が０）
// 引き数	:dt - (入)日付(Date)
// 機能説明	:なし
// 備考		:なし
function DayOfYearAD(dt) {
	var tdt = new Date(dt.getFullYear(), dt.getMonth(), dt.getDate());
	var sdt = new Date(dt.getFullYear(), 3, 1);
	if (dt.getMonth() < 3) {
		sdt.setFullYear(sdt.getFullYear() - 1);
	}
//alert(DateToString(tdt, "yyyymmdd") + "\n" + DateToString(sdt, "yyyymmdd"));
	return(parseInt((tdt.getTime() - sdt.getTime())) / 60 / 60 / 24 / 1000);
}
///////////////////////////////////////////////////////////////////////////////
// 関数名	:DateToString
// 機能		:指定日付の指定フォーマット文字列の文字列を生成する
// 返り値	:文字列
// 引き数	:dt - (入)日付
//		 fmt - (入)フォーマット文字列
// 機能説明	:なし
// 備考		:広域関数
function DateToString(dt, fmt) {
	var spos, epos, pat;
	var rv = "";

	for (spos = 0, epos = 0; ; epos++) {
		if (epos == fmt.length) {
			pat = fmt.substring(spos);
			rv += DateToStringByPrimitivePattern(dt, pat);
			break;
		}
		if (fmt.charCodeAt(spos) != fmt.charCodeAt(epos)) {
			pat = fmt.substring(spos, epos);
			rv += DateToStringByPrimitivePattern(dt, pat);
			spos = epos;
		}
	}
	return(rv);
}
///////////////////////////////////////////////////////////////////////////////
// 関数名	:DateToStringByPrimitivePattern
// 機能		:指定日付の最小単位フォーマット文字列の文字列を生成する
// 返り値	:文字列
// 引き数	:dt - (入)日付
//		 pat - (入)最小単位フォーマット文字列
// 機能説明	:なし
// 備考		:広域関数
function DateToStringByPrimitivePattern(dt, pat) {
	switch (pat) {
		case "a":		//曜日を日本語 (省略形) で返します (日〜土)。
			var day_string = Array("日","月","火","水","木","金","土");
			rv = day_string[dt.getDay()];
			break;
		case "aa":	//曜日を日本語で返します (日曜日〜土曜日)。
			var day_string = Array("日","月","火","水","木","金","土");
			rv = day_string[dt.getDay()] + "曜日";
			break;
		case "aaa":		//曜日を日本語 (省略形) で返します (日〜土)。色つき
			var day_string = Array("日","月","火","水","木","金","土");
			rv = day_string[dt.getDay()];
			switch(dt.getDay()) {
				case 0:	rv = rv.fontcolor("red");	break;
				case 6:	rv = rv.fontcolor("blue");	break;
				default:
			}
			break;
		case "d":		//日付を返します。1 桁の場合、先頭に 0 が付きません (1 〜 31)。
			rv = (dt.getDate()).toString();
			break;
		case "dd":		//日付を返します。1 桁の場合、先頭に 0 が付きます (01 〜 31)。
			rv = PaddingToString(dt.getDate(), 2, "0");
			break;
		case "m":		//月を返します。1 桁の場合、先頭に 0 が付きません (1 〜 12)。
			rv = (dt.getMonth() + 1).toString();
			break;
		case "mm":		//月を返します。1 桁の場合、先頭に 0 が付きます (01 〜 31)。
			rv = PaddingToString(dt.getMonth() + 1, 2, "0");
			break;
		case "yyyy":	//西暦年を返します。4 桁未満の場合 0 が付きます (0001 〜 9999)。
			rv = PaddingToString(dt.getFullYear(), 4, "0");
			break;
		default:
			rv = pat;
			break;
	}
	return(rv);
}
///////////////////////////////////////////////////////////////////////////////
// 関数名	:PaddingToString
// 機能		:指定値を指定文字数の長さを持つ文字列に変換する
// 返り値	:文字列
// 引き数	:val - (入)値
//		 length - (入)文字数
//		 fill_char - (入)埋草文字
// 機能説明	:なし
// 備考		:広域関数
function PaddingToString(val, length, fill_char) {
	var rv = "";

	switch(arguments.length) {
		case 1:
			length = rv.length;
		case 2:
			fill_char = "0";
		case 3:
			rv = val.toString();
			if (rv.length < length) {
				var padding_count = length - rv.length;
				for (var i = 0; i < padding_count; i++) {
					rv = fill_char + rv;
				}
			}
			break;
		default:
			alert("Error[PaddingToString]: Invalid Arguments Count !!!");
	}
	return(rv);
}
//------<< EOF >>------
