毎日の出席状況をまとめるデータベースを作っているのですが、現在やりたいことが二つあります。
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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ファイル名に日付の挿入
-
SQL:TIMESTAMPの期間検索を指...
-
プルダウンからの日付取得処理
-
phpでの日付の取得について
-
開始と終了を指定して、その間...
-
昨日の日付名でファイルを作成...
-
アップロードしたファイル名に...
-
週や年データを取得するには
-
PHPでmysqlを使ってます。日時...
-
Accessコンボボックス
-
ASP 年度年齢の計算
-
MYSQLの日付から現在までの年数...
-
Dosブロンプトでtabを出力したい
-
DTOとEntityの差は何ですか。
-
ゼロとNULLを区別して number_f...
-
Yahoo! JAPAN IDを新規取得でき...
-
excel access連携 このテーブル...
-
Sessionの上限について
-
switch()文で値の大小比較
-
classの再定義エラーについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
開始と終了を指定して、その間...
-
ファイル名に日付の挿入
-
昨日の日付を取得するVBscript
-
アップロードしたファイル名に...
-
現在時刻をyyyymmddhhmmss形式...
-
昨日の日付名でファイルを作成...
-
C言語でシステム日付との差を...
-
プルダウンからの日付取得処理
-
md5について
-
C言語を使って、ある特定の日の...
-
MYSQLの日付から現在までの年数...
-
strtotime 前月・前々月の表示
-
PHPで以下のような占いプログラ...
-
日付を付けたファイルを作成したい
-
ESXiのdateコマンドについて
-
MS-DOSでの日付表示
-
PHPでn日後を計算したい
-
シェルスクリプト:N日前の日付...
-
構造体の自作関数内で入力した...
-
日付時間をファイル名にしたい...
おすすめ情報