電子書籍の厳選無料作品が豊富!

毎日の出席状況をまとめるデータベースを作っているのですが、現在やりたいことが二つあります。

1.A月11日~B月10日の期間内を表示させる方法。
現在は登録されたもの全てブラウザ上で見られるようになっているのですが、
この状態から、今月分として1月11日~2月10日までを表示させて、2月11日以降から2月11日~3月10日までを表示させたい。
2月11日を過ぎると1月分は表示させず、下記のプルダウンメニューで参照出来るようにしたいと思っています。

2.プルダウンメニューで2006年A月、2006年B月、2006年C月・・・と表示していて、
例えば2006年B月を選択すると、B月11日~C月10日分を表示できるようする方法。

以上の事はPHPで実現可能なのでしょうか。
よろしくお願いします。

A 回答 (4件)

私も以前年月日をデータベースの別フィールドで登録していてPHP側で日付の絞込みをしたことがあります。



その時のやり方は以下のようなものでした。
※他にもっといい方法があるかもしれません。

-------------------------------------------------------
$s_yy = "検索開始年";
$s_mm = "検索開始月";
$s_dd = "検索開始日";
// 検索開始年月日のタイムスタンプの取得
$s_timestamp = mktime(0, 0, 0, $s_mm, $s_dd, $s_yy);

$e_yy = "検索終了年";
$e_mm = "検索終了月";
$e_dd = "検索終了日";
// 検索終了年月日のタイムスタンプの取得
$e_timestamp = mktime(0, 0, 0, $e_mm, $e_dd, $e_yy);

while(レコード数分ループ) {
$d_yy = "データベースの年";
$d_mm = "データベースの月";
$d_dd = "データベースの日";
// レコードのタイムスタンプの取得
$d_timestamp = mktime(0, 0, 0, $d_mm, $d_dd, $d_yy);

// 検索開始年月日より前なら表示しない
if($s_timestamp > $d_timestamp) continue;

// 検索終了年月日より後なら表示しない
if($d_timestamp > $e_timestamp) continue;

/* 該当レコードなので表示する */

}
-------------------------------------------------------
イメージとしてはこのようなものです。



【 参考:http://jp.php.net/manual/ja/ref.datetime.php 】

time():
   現在の時間を1970年1月1日 00:00:00からの通算秒で取得する
mktime(時間, 分, 秒, 月, 日, 年):
   指定時間を1970年1月1日 00:00:00からの通算秒で取得する
※ただし、mktime()には使用できる有効範囲があります。
    • good
    • 0
この回答へのお礼

素早いレスと、わざわざサンプルまで載せて頂いてありがとうございました!
無事希望通りの結果を表示させることが出来ました。

今回は何度もお付き合いいただいてありがとうございました。

お礼日時:2006/01/12 19:08

#3です。

コピペミスがあったのでもう一度。

<?PHP

$today=mktime();
$today=mktime(0,0,0,1,1,2005);

if($_GET['theDay']==""){
$theDay= $today;
}else{
$theDay=strtotime($_GET['theDay']);
}

$startDay=mktime(0,0,0,date("m",$theDay),11,date("Y",$theDay));
$endDay=mktime(0,0,0,date("m",$theDay)+1,10,date("Y",$theDay));

if (date("d",$theDay)<11){
$startDay=strtotime("-1 month",$startDay);
$endDay=strtotime("-1 month",$endDay);
}

print "SELECT * FROM `hoge` WHERE `date` BETWEEN `".date("Y/m/d",$startDay)."` AND `".date("Y/m/d",$endDay)."`";

print "<hr>";
print "<form action='$PHP_SELF' method='get'>";
print "<select name='theDay'>\n";
for ($i=0;$i<12;$i++){
print "<option value=\""
.date("Y/m/d",mktime(0,0,0,date("m",$today)-$i,11,date("Y",$today)))."\">"
.date("Y年m月",mktime(0,0,0,date("m",$today)-$i,11,date("Y",$today)))
."<br>\n";
}
print "</select>\n";
print "<input type='submit' value='send'>";
print "</form>";
?>
    • good
    • 0
この回答へのお礼

yambejpさんこんにちは。
有用なサンプルを載せて頂きありがとうございました。
こちらも理想どおりの結果が出ていて、このような方法もあるのかと勉強させられました。
じっくりと参考にさせていただきたいと思います。

今回はどうもありがとうございました。

お礼日時:2006/01/12 19:29

とりあえずこんな感じでしょか?



mktimeとstrtotimeさえわかればPHPなら日付操作は
柔軟です。

<?PHP
header("Content-Type:text/html;charset=euc-jp");

$today=mktime();
$today=mktime(0,0,0,1,1,2005);

if($_GET['theDay']==""){
$theDay= $today;
}else{
$theDay=strtotime($_GET['theDay']);
}

$startDay=mktime(0,0,0,date("m",$theDay),11,date("Y",$theDay));
$endDay=mktime(0,0,0,date("m",$theDay)+1,10,date("Y",$theDay));

if (date("d",$theDay)<11){
$startDay=strtotime("-1 month",$startDay);
$endDay=strtotime("-1 month",$endDay);
}

print "SELECT * FROM `hoge` WHERE `date` BETWEEN `".date("Y/m/d",$startDay)."` A

print "<hr>";
print "<form action='$PHP_SELF' method='get'>";
print "<select name='theDay'>\n";
for ($i=0;$i<12;$i++){
print "<option value=\""
.date("Y/m/d",mktime(0,0,0,date("m",$today)-$i,11,date("Y",$today)))."\">"
.date("Y年m月",mktime(0,0,0,date("m",$today)-$i,11,date("Y",$today)))
."<br>\n";
}
print "</select>\n";
print "<input type='submit' value='send'>";
print "</form>";
?>
    • good
    • 0

kakapoさんはじめまして、papillon68と申します。



データベースを使われるので、日付型で登録してSQLにより検索する方法やPHPにより絞込みを行う方法など
で絞込みは行えます。


SQLでの絞込みは使っているデータベースにより文法が違ったりするので注意する必要があると思います。
http://www.sound-uz.jp/php/bbs/index.php?mode=to …


PHPでの絞込みでは日付・時刻関数を使います。
http://jp.php.net/manual/ja/ref.datetime.php
    • good
    • 0
この回答へのお礼

こんにちはpapillon68さん。

解りやすい解説ありがとうございました。
やり方はかなり理解できました。

あつかましくもう一つ質問があるのですが、
SQLでは日付をそれぞれday1(年)、day2(月)、day3(日)というフィールドに分けて格納しています。

今回紹介させていただいたサイトを参考にして、
PHPで絞込みをしようと思っているのですが、
SQLではバラバラに日付を格納しているため、
PHPで処理する際に日付としてどうまとめたらいいのか困っています。

すごく初歩的な問題なのかもしれませんが、よろしければご教授いただきたいと思っています。

お礼日時:2006/01/12 16:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!