dateFunc.inc 3.82 KB
<?PHP 
//'*************************************************
//'小川作
//'日付関連小ネタ関数
//'*************************************************

// ■□ ×年×月×日の指定日後の年月日を計算する
//
function GetPointDay( $TargetDate, $PointDay, &$ResultDate, &$ErrMsg ) {
	$Stat			= True;			// ステータス
	$Date			= array();		// 分解後日付
	$PointFlag		= "";			// 判断フラグ
	$UNIXTime		= "";			// UNIX標準時間

	// 対象日付が未指定の場合はエラー
	if( $TargetDate == "" ) {
		$ErrMsg = "年月日を指示してください。";
		return False;
	}

	// 始点,終点日付を調整する
	$Stat = &AdjectDate( $TargetDate, $Date, $ErrMsg );
	if( ! $Stat ) return False;

	$Date[2]	= $Date[2] + $PointDay;
	$UNIXTime	= mktime( 0, 0, 0, $Date[1], $Date[2], $Date[0] );

	$ResultDate[0]	= date( 'Y', $UNIXTime );
	$ResultDate[1]	= date( 'n', $UNIXTime );
	$ResultDate[2]	= date( 'j', $UNIXTime );

	if( strlen( $ResultDate[1] ) != 2 ) $ResultDate[1] = "0".$ResultDate[1];
	if( strlen( $ResultDate[2] ) != 2 ) $ResultDate[2] = "0".$ResultDate[2];

	return True;
}

// ■□ ×年×月×日の指定月後の年月日を計算する
// $Mode 編集後の日付に関して
//    0:自動調整 1:強制1日出力
function GetPointMonth( $Mode, $TargetDate, $PointMonth, &$ResultDate, &$ErrMsg ) {
	$Stat			= True;			// ステータス
	$Date			= array();		// 分解後日付
	$PointFlag		= "";			// 判断フラグ
	$UNIXTime		= "";			// UNIX標準時間

	// 対象日付が未指定の場合はエラー
	if( $TargetDate == "" ) {
		$ErrMsg = "年月日を指示してください。";
		return False;
	}

	// 始点,終点日付を調整する
	$Stat = &AdjectDate( $TargetDate, $Date, $ErrMsg );
	if( ! $Stat ) return False;

	$Date[1]	= $Date[1] + $PointMonth;
	
	switch($Mode){
		case 0:
			$UNIXTime	= mktime( 0, 0, 0, $Date[1], $Date[2], $Date[0] );
			break;
			
		case 1:
			$UNIXTime	= mktime( 0, 0, 0, $Date[1], "01", $Date[0] );
			break;
	}

	$ResultDate[0]	= date( 'Y', $UNIXTime );
	$ResultDate[1]	= date( 'n', $UNIXTime );
	$ResultDate[2]	= date( 'j', $UNIXTime );

	if( strlen( $ResultDate[1] ) != 2 ) $ResultDate[1] = "0".$ResultDate[1];
	if( strlen( $ResultDate[2] ) != 2 ) $ResultDate[2] = "0".$ResultDate[2];

	return True;
}


// □■ スラッシュ区切りの日付の有効チェックを行い,年/月/日に分解後,月/日の桁
//		調整を行う
//
function AdjectDate( $Date, &$DivDate, &$ErrMsg ) {
	$Stat			= True;			// ステータス
	$LastDay		= "";			// 末日格納
	$EndDay			= array();		// 毎月最終日格納

	// 日付を分割する
	$DivDate = explode( "/", $Date );

	// 半角数字チェック,及び範囲チェックを行う
	if( $DivDate[0] != "" &&
							! ereg( "^[12][0-9][0-9][0-9]$", $DivDate[0] ) ) {
		$ErrMsg = "年の入力が正しくありません。";
		return False;
	} elseif( $DivDate[1] != "" &&
								! ereg( "^0?[1-9]$|^1[0-2]$", $DivDate[1] ) ) {
		$ErrMsg = "月の入力が正しくありません。";
		return False;
	} elseif( $DivDate[2] != "" &&
					! ereg( "^0?[1-9]$|^[12][0-9]$|^3[01]$", $DivDate[2] ) ) {
		$ErrMsg = "日の入力が正しくありません。";
		return False;
	}

	// $DivDate[0] 年 $DivDate[1] 月の末日を求める
	$EndDay  = array( 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 );
	$LastDay = $EndDay[$DivDate[1] - 1];
	$LastDay += ( $DivDate[1] == 2 and $DivDate[0] % 4 == 0 and ( $DivDate[0] % 400 == 0 or $DivDate[0] % 100 != 0 ) );

	// 末日チェックを行う
	if( $DivDate[2] != "" ) {
		if( $DivDate[2] > $LastDay ) {
			$ErrMsg = "指示された年月内で有効な日付を入力してください。";
			return False;
		}
	}

	// 桁数調整
	if( strlen( $DivDate[1] ) != 2 ) $DivDate[1] = "0".$DivDate[1];
	if( $DivDate[2] != "" ) {
		if( strlen( $DivDate[2] ) != 2 ) $DivDate[2] = "0".$DivDate[2];
	}

	return True;
}

//----------------------------------------------- 
// □ 西暦から和暦に変換 (平成限定)
//----------------------------------------------- 
function seireki_wareki($strseireki, &$strwareki){ 
	$strwareki = "";
	 
	if ($strseireki > "1988"){ 
	    $intseireki = (integer)$strseireki - 1988;
	    $strwareki = $intseireki;
	}
}

?>