![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_16.png?e8efa67)
毎日の出席状況をまとめるデータベースを作っているのですが、現在やりたいことが二つあります。
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で実現可能なのでしょうか。
よろしくお願いします。
No.2ベストアンサー
- 回答日時:
私も以前年月日をデータベースの別フィールドで登録していて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()には使用できる有効範囲があります。
素早いレスと、わざわざサンプルまで載せて頂いてありがとうございました!
無事希望通りの結果を表示させることが出来ました。
今回は何度もお付き合いいただいてありがとうございました。
No.4
- 回答日時:
#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>";
?>
yambejpさんこんにちは。
有用なサンプルを載せて頂きありがとうございました。
こちらも理想どおりの結果が出ていて、このような方法もあるのかと勉強させられました。
じっくりと参考にさせていただきたいと思います。
今回はどうもありがとうございました。
No.3
- 回答日時:
とりあえずこんな感じでしょか?
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>";
?>
No.1
- 回答日時:
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
こんにちはpapillon68さん。
解りやすい解説ありがとうございました。
やり方はかなり理解できました。
あつかましくもう一つ質問があるのですが、
SQLでは日付をそれぞれday1(年)、day2(月)、day3(日)というフィールドに分けて格納しています。
今回紹介させていただいたサイトを参考にして、
PHPで絞込みをしようと思っているのですが、
SQLではバラバラに日付を格納しているため、
PHPで処理する際に日付としてどうまとめたらいいのか困っています。
すごく初歩的な問題なのかもしれませんが、よろしければご教授いただきたいと思っています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルの数式で教えてください。 2 2023/01/10 09:15
- Excel(エクセル) エクセルの数式で教えてください。 2 2022/12/23 14:57
- Excel(エクセル) Excel2019、2021の日付、曜日の表示について 2 2022/11/29 15:01
- Excel(エクセル) 現時点の年齢を算出して、その年齢と一致したセルを色付けしたい。 4 2022/06/23 17:49
- Excel(エクセル) Excel2019、2021の売り上げなどの集計表について 4 2022/11/29 14:03
- Excel(エクセル) エクセルの数式で教えてください。 3 2022/12/22 17:29
- Excel(エクセル) エクセルの数式で教えてください。 3 2023/04/17 09:25
- Excel(エクセル) エクセルについて 8 2023/02/11 07:36
- Excel(エクセル) エクセルの日付表示を変換するやり方をご存じの方は教えて下さい。 7 2022/12/28 15:43
- Excel(エクセル) エクセルについて教えてください。 1 2023/03/03 08:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
1ヶ月後の日付を出力したい
-
月末日判定
-
6ヶ月前の日付を取得するにはど...
-
開始と終了を指定して、その間...
-
【続】PHPとJSONについて
-
ファイル名に日付の挿入
-
「取得先」という表現について
-
Dosブロンプトでtabを出力したい
-
wordの差し込み印刷で文字...
-
DTOとEntityの差は何ですか。
-
excel access連携 このテーブル...
-
【C#】DataGridViewの最大列数...
-
phpでcookieがうまく保存されない
-
小数点以下0の非表示
-
ブラウザを閉じた後もセッショ...
-
format関数について
-
Excel VBA:特定の文字列以降(...
-
ミュージックのアートワークを...
-
バッチファイルでpingの結果を...
-
WordでExcelデータを差込...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
開始と終了を指定して、その間...
-
ファイル名に日付の挿入
-
昨日の日付を取得するVBscript
-
PHP 指定した期間だけ表示した...
-
Accessで、DAOでAddnew
-
C言語を使って、ある特定の日の...
-
codeigniterの時間設定
-
日付計算について
-
昨日の日付名でファイルを作成...
-
現在時刻をyyyymmddhhmmss形式...
-
substrの使い方について教えて...
-
差分の月数を算出する方法
-
1ヶ月後の日付を出力したい
-
経過期間計算がうまくいかない
-
C言語でシステム日付との差を...
-
今日の日付から1週間のリスト
-
アップロードしたファイル名に...
-
strtotime 日付の変換
-
PHPでmysqlを使ってます。日時...
-
6ヶ月前の日付を取得するにはど...
おすすめ情報