─━ IT ━─

PHP Tips: 날짜와 시간을 파라미터로 취급한다

DKel 2021. 8. 16. 00:42
반응형
먼저 PHP에서 날짜를 후속처리에서 파라미터로 다루는 경우 선택목록에서 연월일을 선택하는 경우가 많습니다.선택 리스트에 연월일을 세트 하는 경우는, 「년」 「월」 「일」별로 3개의 리스트를 준비하는 패턴도 있고, 1개의 선택 리스트로 끝내는 경우도 있습니다.또, 목적에 따라서는 내일 이후의 날짜를 세팅해 두는 것이 사용하기 쉽거나 현재의 시각을 반영해 선택 리스트의 초기치가 세팅되어 있으면 시각의 선택이 원활하기도 합니다.이들 패턴에 대해 몇 가지 살펴보겠습니다.대상 독자 PHP를 이미 사용하시는 분을 대상으로 하고 있습니다.기본적인 내용이지만, PHP에 관한 입문용 내용은 포함하고 있지 않습니다.필요에 따라서 PHP 메뉴얼등의 메뉴얼이나 각 서적을 봐 주세요.필요한 환경 PHP가 인스톨 되어 PHP 스크립트가 동작 가능한 상태인 것을 전제로 하고 있습니다.날짜를 선택하는 리스트 날짜를 파라미터로 받기 위한 간단한 예는 3개의 선택 리스트를 준비해서 ′년,월,일′을 선택하게 하는 것입니다.생년월일 등을 선택하게 할 때 흔히 볼 수 있는 구성입니다.이것은 select 태그의 option 요소를 반복 출력할 때, 선택 값 예를 들어 월이면 <1>에서 <12>를 출력합니다.list . php
< html >
< head >
날짜를 선택하는 목록
< / head >
< body >
< form method = ′ POST ′ >
< ? php
echo ′ < select name = ′ yyyy ′ > ′ ;
for ( $ i = 2005 ; $ i < 2020 ; $ i++ ) {
echo ′ < option > ′ . $ i ;
}
echo ′ < / select > 年 ′ ;

echo ′ < select name = ′ mm ′ > ′ ;
for ( $ i = 1 ; $ i < 13 ; $ i++ ) {
echo ′ < option > ′ . $ i ;
}
echo ′ < / select > 月 ′ ;

echo ′ < select name = ′ dd ′ > ′ ;
for ( $ i = 1 ; $ i < 32 ; $ i++ ) {
echo ′ < option > ′ . $ i ;
}
echo ′ < / select > 日 ′ ;

echo ′

선택된 날짜:′.$_POST[′yyy′].
′ / ′ . $ _ POST [ ′ mm ′ ] . ′ / ′ . $ _ POST [ ′ dd ′ ] ;
?>

< input type = ′ submit ′ value = ′ 送信 ′ >
< form >
< / body >
내일 이후의 날짜를 세팅하는 날짜를 선택하게 하는 리스트에서도, 상품의 배달 희망일과 같이 특정의 날짜, 예를 들면 내일 이후를 선택시키고 싶은 경우가 있습니다.앞에서 말한 단순한 선택 목록을 사용해도 가능하지만 다음 예에서는 좀 더 단순하게 날짜를 선택할 수 있도록 date함수를 사용하여 내일 이후의 날짜를 선택 목록에 셋팅을 하겠습니다.내일 날짜로서 strtotime 함수에게 건네주는 파라미터로 ′+1 day′를 사용할 수 있으며, ′+1′을 늘려감으로써 내일 이후의 날짜를 선택목록에 출력하고 있습니다.tomorrow . php
< html >
< head >
내일 이후 날짜를 셋팅하는
< / head >
< body >
< form method = ′ POST ′ >
< ? php
echo ′오늘 날짜:′.date(′Y/m/d′);
echo ′

< select name = ′ selDate ′ > ′ ;

for ( $ i = 1 ; $ i < 5 ; $ i++ ) {
echo ′ < option > ′ . date ( ′ Y / m / d ′ , strtotime ( ′ + $ i day ′ )) ;
}
echo ′ < / select > ′ ;

echo ′

선택된 날짜:′.$_POST[′selDate′];
?>

< input type = ′ submit ′ value = ′ 送信 ′ >
< form >
< / body >
앞뒤 달에 대한 링크를 표시하는 현재를 기준으로 한 날짜를 선택하게 하는 예는 이 밖에도 몇 가지 있습니다.블로그 등에서는 표시할 기사를 월 단위로 압축할 수 있도록 전달이나 다음 달로의 링크도 볼 수 있습니다.이것도 다음과 같이 date 함수를 사용하여 전달부터 3개월분의 링크를 작성함으로써 실현됩니다.3 months . php
< html >
< head >
앞뒤 달 링크 표시
< / head >
< body >
< ? php
// 세월을 취득하다
if ( isset ( $ _ GET [ ′ ym ′ ] )) {
$ yyyy = substr ( $ _ GET [ ′ ym ′ ] , 0 , 4 ) ;
$ mm = substr ( $ _ GET [ ′ ym ′ ] , 5 , 2 ) ;
}
else {
$ yyyy = date ( ′ Y ′ ) ;
$ mm = date ( ′ m ′ ) ;
}

//앞뒤 연월 링크 표시 문자열
$ ym = date ( ′ Y/m ′ , mktime ( 0 , 0 , 0 , $ mm , 1 , $ yyyy )) ;
$ ar _ name = array ( ′ < 前 ′ , $ ym , ′ 次 > ′ ) ;

//앞뒤 연월 링크 표시하기
for ( $ i = 0 ; $ i < 3 ; $ i++ ) {
$ ym = date ( ′ Y/m ′ , mktime ( 0 , 0 , 0 , $ mm + $ i-1 , 1 , $ yyyy )) ;
echo ′ . ′ ? ym = $ ym > $ ar _ name [ $ i ] < / a > ′ ;
}

echo ′

선택된 날짜:′.$_GET[′ym′];
?>
< / body >
유효한 월말일까지를 세트 하는 1일부터 월말의 일자까지를 선택 리스트에 세트 하는 경우, 각월에 따라서 다른 말일에의 대응이 필요합니다.월말 날짜 테이블을 준비해 두는 방법도 있습니다만, 윤년 대응 등이 귀찮습니다.유효한 날짜를 판별하는 checkdate 함수를 사용하여 함수의 반환값이 TRUE일 때 날짜를 출력하도록 하여 지정 연월의 마지막 날이 되는 날짜까지 출력시킬 수 있습니다.end . php
< html >
< head >
유효한 말일까지 선택 목록
< / head >
< body >
< form method = ′ POST ′ >
< ? php
$ yyyy = 2005 ;
$ mm = 2 ;
$ dd = 1 ;

// 날짜를 세트
echo ′ < select name = ′ ymd ′ > ′ ;
while ( checkdate ( $ mm , $ dd , $ yyyy )) {
echo ′ < option > ′ . $ yyyy . ′ / ′ . $ mm . ′ / ′ . $ dd ;
$ dd + = 1 ;
}
echo ′ < / select > ′ ;

// 선택하신 날짜 표시
echo ′

선택된 날짜:′.$_POST[′ymd′];
?>

< input type = ′ submit ′ value = ′ 送信 ′ >
< form >
< / body >
예약 시각을 세트 하는 예약 시각의 선택등과 같이, 일정 간격의 시각을 선택 리스트에 출력하고 싶기도 합니다.date 함수로 시간(hour)을 일정 간격으로 가산함으로써 이러한 선택 리스트를 작성할 수 있습니다.hour . php
< html >
< head >
예약 시간 세팅하기
< / head >
< body >
< form method = ′ POST ′ >
< ? php
echo ′ < select name = ′ selTime ′ > ′ ;

for ( $ i = 9 ; $ i < 18 ; $ i++ ) {
echo ′ < option > ′ . date ( ′ Y / m / d G : 00 ′ , strtotime ( ′ + $ i hour ′ )) ;
}
echo ′ < / select > ′ ;

echo ′

선택된 시간:′.$_POST[′sel Time′];
?>

< input type = ′ submit ′ value = ′ 送信 ′ >
< form >
< / body >
일정 간격의 시간을 선택 리스트에 세트 할 경우에, 1시 11시나 1분 59분이라고 하는 상태로 1시간 단위나 1분 간격으로 값을 세트 하는 것이 아니라, 15분 간격이라고 하는 상태로 일정 간격으로 선택 리스트에 세트 하고 싶기도 합니다.이 경우에는 strtotime 함수에서 ′minute′를 가산하면서 date함수로 시간을 세팅합니다.interval . php
< html >
< head >
일정 간격으로 시간을 선택 목록에 세트
< / head >
< body >
< form method = ′ POST ′ >
< ? php

//시간을 세트
echo ′ < select name = ′ selTime ′ > ′ ;

for ( $ i = 0 ; $ i < 96 ; $ i++ ) {
echo ′ < option > ′ . date ( ′ H : i ′ , strtotime ( ′ + ′ . $ i * 15 . ′ minute ′ )) ;
}
echo ′ < / select > ′ ;

// 선택된 시간 표시
echo ′

선택된 시간:′.$_POST[′sel Time′];
?>

< input type = ′ submit ′ value = ′ 送信 ′ >
< form >
< / body >
현재 시간을 선택 리스트의 초기치에 반영하는 앞에서 말한 것처럼 일정 간격의 시간이 세팅된 선택 리스트는 초기치에 현재 시간을 반영시키고 싶은 것이 있습니다.이 경우 선택목록에 세팅하는 시간과 현재 시간을 비교하면서 대소조건을 충족할 때 selected를 출력합니다.그러면 현재 시간에 가장 가까운 요소가 처음부터 선택 상태가 됩니다.이것은, 타임 카드로 현재의 시간과 가까운 요소를 선택하는 것이 상정되는 케이스 등에 사용할 수 있습니다.기본값으로 설정합니다.php

머리
現在の時間を選択リストの初期値に反映

몸통
= 양식 방법′POST′ >


//時間間隔を設定
$stepTime = 15;

//時間をセット
′<이름=′selTime′ 선택′,

($i = 0; $i = 96; $i++) {
$disp시간 = 날짜(′H:i′,
stto time specture+.′ $i * $step시간. ′분′);
$now = 날짜(′H:i′);
에코 ′<옵션′;
if($now = $disp)시간 및 $disp시간 + $단계시간 > $now) {
echo ′ 선택됨 ′;
}

에코 ′>′. $disp시간;
}
에코 ′/선택′,

//現在の時間を表示
echo ′

現在の時間:′.$now;

//選択された時間を表示
echo ′

選択された時間:′.$_POST[′selTime′;
?>
==입력 유형=′value′ 값=′value′ =
<양식>


入力時刻を処理する時刻を選択させるのではなく、4桁で入力してもらう場合もあります。この場合は受け取った時刻のチェックと整形が必要となります。次の例では入力時刻をsubstr関数で分割して範囲をチェックしています。entry.php

머리
入力時刻を処理する

몸통
= 양식 방법′POST′ >

//入力時刻を受け取る
$strDate = $_POST[(′txtDate′);

//入力時刻をチェックする
if(strlen($strDate) < 4) {
$strerr = ′4桁で入力してください。′;
} 기타 {
$mm = 하위 시스템($strDate, 0, 2);
$ss = 하위 시스템($strDate, 2, 2);

if ($mm < ′00′ 또는 $mm > ′24′) {
$strErr = ′modic′,
}

if ($ss < ′00′ 또는 $ss > ′60′) {
$strErr = ′modic′,
}
}

//チェック結果を表示する
if(set($strErr) {)
에코 ′} 기타 {
에코 ′}

?>

==입력 유형=′텍스트′ 이름=′txtDate′ 값=′=?= $strDate?>′>
==입력 유형=′value′ 값=′value′ =
<양식>

カレンダーを表示するカレンダーのサンプルです。ここまでで説明した前後の年月へのリンクやcheckdate関数による有効月末日付の判別も使っています。日曜日を新たな行で始めるため、「date(′w′, ...)」の戻り値が「0」だったときにtrタグを追加しています。calendar.php

머리
<제목>

몸통

//年月を取得する
if(set ($_GET[′ym])) {′
$yyy = 하위 항목($_GET[′ym′, 0, 4);
$mm = 하위 항목($_GET[′ym′, 5, 2);
}
다른 {
$yyy = 날짜 표시Y′);
$mm = 날짜 1500만′;
}

//前後の年月へのリンク表示文字列
$ym = 날짜(′Y/m′, mktime(0, 0, 0, $mm, 1, $yyy);
$ar_name = 배열 = sarrays=filename, $ym, ′filename′;

//前後の年月へのリンクを表示する
($i = 0, $i = 3, $i++) {
$ym = 날짜(′Y/m′, mktime(0, 0, 0, $mm + $i-1, 1, $yyyy);
에코 ′=ahref=′test.test?ym=$ym′ >$ar_name[/a]′;
}

//曜日を表示する
에코 ′<테이블 테두리=′1′′,
′′를 울립니다.
echo ′日′;
echo ′月′;
echo ′火′;
echo ′水′;
echo ′木′;
echo ′金′;
echo ′土′;
에코 ′/tr;

//日付表示を開始する
′′를 울립니다.
$dd = 1;

//1日の曜日まで移動する
$firstw = date argw′, mktime(0, 0, 0, $mm, 1, $yyy);
($i = 0; $i = $firstw; $i++) {
echo ′′;
}

//日付を表示する
반면(체크 날짜:mm, $ddd, $yyyy) {
if(날짜: w′, mktime(0, 0, 0, $mm, $dd, $yyy) == 0) {
에코 ′;
}
에코 ′[seco]$ddd′
$dd + = 1;
}
echo ′,
?>

まとめ本稿では、処理で使う日付や時間の扱いに関して次のようなポイントを説明しました。date 함수와 strtotime 함수에 의해 표시할 날짜 간격 등을 결정할 수 있다.
텍스트 상자에 입력된 시간은 substr 함수로 처리할 수 있다
checkdate 함수로 유효한 월말일을 조사할 수 있다.
시각 선택 리스트는 초기값을 세팅하면 용도에 따라 편리 참고자료 니시자와 나오키 저, 쇼에이샤, 2005년 1월
『PHP에 의한 Web 어플리케이션 슈퍼 샘플』 니시자와 나오키 저, 소프트뱅크 퍼블리싱, 2002년 9월
반응형