dateFunc.inc
3.82 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
<?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;
}
}
?>