• ベストアンサー

今日の日付から1週間のリスト

PHPで現在の日付を受け取り1週間後までの日付を表示させるリストを作っています。 年月日すべてが表示されるようにしたいので(年はなくても可)今日であれば <select name=day> <option>2008/01/16</option> <option>2008/01/17</option> ・・・ <option>2008/01/23</option> </select> のように代入したいです。 date関数からdayだけに7を足しても月の変わり目で31日をオーバーしてしまうので <option>2008/01/31</option> <option>2008/02/01</option> と正しく表示させるにはどうすればいいでしょうか?

  • oxfax
  • お礼率27% (57/209)
  • PHP
  • 回答数9
  • ありがとう数5

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.7

>echo "<select name="send_date">\n"; は文法的にまちがってますね。まあ転記ミスでしょうけど >$date = $_POST[send_date] これも$date = $_POST["send_date"]としましょう。 日付型のデータにしたいなら、前回も書きましたがstrtotime()で。 $date = strtotime($_POST["send_date"]); 元ソースoptionにvalueをきちんと設定しないと値が渡らないことも あるので、以下のようにしてみるといいでしょう。 なおヒアドキュメントで書くと構造がよくわかると思います。 <?PHP $date=strtotime("2008/01/30"); $str=""; for($ii=0;$ii<7;$ii++){ $str_date=date('Y/m/d',$date + $ii * 60*60*24); $str.="<option value='{$str_date}'>{$str_date}</option>\n"; } print <<<eof <form method="get"> <select name="send_date"> {$str} </select> <input type="submit"> </form> eof;

oxfax
質問者

お礼

ありがとうございます。 非常に参考になりました。

その他の回答 (8)

  • fa-ce
  • ベストアンサー率42% (9/21)
回答No.9

>データベースではchar型で日付を入れています。 ということなら、 $date = $_POST["date"];//受け取った日付データ($date="2007/01/20"など) $date = "'".$date"'"; としてやって、 日付のカラムにインサートしてあげればいいんじゃないかな? >また、このプログラムでデータベースに入れて値を取り出すときに >さらにこの日付の1週間後を計算することはできるのでしょうか? >例) >購入履歴と有効期限の関係のように >2008/01/16を格納して別のページで >2008/01/16と2008/01/23を取り出すなど ということであれば、 取り出したchar型の日付($date1)を、 list($y,$m,$d) = explode("/",$date1); $day1 = mktime(0, 0, 0,$m,$d,$y ); // mktime (時, 分, 秒, 月, 日, 年, サマータイム); $day2 = $day1+(86400*7); //1日が86400で、7日後なので 86400*7 として、 $date2 = date('Y/n/j',$day2); で日付にしてやれば、 $date1 が 購入履歴 2008/01/16 $date2 が 有効期限 2008/01/23 となると思います

  • wp_
  • ベストアンサー率54% (132/242)
回答No.8

mysqlのdate型についてよく知る必要があります。 http://dev.mysql.com/doc/refman/4.1/ja/date-and-time-types.html http://dev.mysql.com/doc/refman/4.1/ja/date-and-time-functions.html > $date = $_POST["send_date"] 上記のようにするのであれば > echo "<option>".$y.'/'.$m.'/'.$d."</option>\n"; ここでPOSTする値がmysqlの日付書式に即してなくてはなりません。 echo "<option value='".$y."-".$m."-".$d." 00:00:00'>(snip)</option>"; // 年月日の区切りはハイフンではなかったでしたっけ? また、$_POSTの値をそのまま使用するとSQLインジェクションにつながりますので $date = mysql_real_escape_string($_POST["send_date"]); とすべきでしょう。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.6

>リストの表示はできたのですがデータベースに格納したときに >例えば2008/01/16だと"/"が割り算となり値が125として入ってしまうのですが・・・ >"-"だと引き算になり他の記号はエラーになってしまいます。 >データベースではchar型で日付を入れています。 日付はdate型でしょう・・・ INSERTやUPDATEする際に、きちんとクォーテーションでくくってますか? SET `日付`='2008/01/16'とすればよいですが、 SET `日付`=2008/01/16ではだめです。 なお/と-は混在さえしなければmysql側で自動的に判断してくれますので どちらでもOKです。 また、mysqlからとりだした日付データはPHP側でstrtotime()して日付 としてあつかい、表示の際にdate()で整形してやればよいでしょう

oxfax
質問者

お礼

now()を入れれば格納も取り出しもできたのですが 前ページからdate型の変数を受け取ってその日付を格納する方法が分かりません。 例えば echo "<select name="send_date">\n"; for($ii=0;$ii<7;$ii++) {  list($y,$m,$d) = explodate(",", date('Y,m,d',time() + $ii * 60*60*24));  echo "<option>".$y.'/'.$m.'/'.$d."</option>\n"; } echo "</select>"; でフォームページを作った場合次のページで $date = $_POST[send_date] としても正しくdate型として扱われません。

回答No.5

実は mktime 関数は「mktime(0,0,0,5,35,2008)」とかも受け入れてくれるので $d = mktime(0,0,0,date("m"),date("d")+7,date("Y")); でいけます。

  • fa-ce
  • ベストアンサー率42% (9/21)
回答No.4

<?php $d = 86400; $date = mktime(); for ($i= 0;$i<7; $i++){ $date +=$d; $Date[] = $date; } foreach($Date as $d){ $d = date('Y/n/j',$d); $option.="<option>$d</option>"; } //表示 echo <<< EOF <select name = 'day'> $option </select> EOF; ?>

  • Suzi
  • ベストアンサー率38% (130/334)
回答No.3

文面だけで回答しています。 「今日」のタイムスタンプをその日付から取ると、例えば1/16 00:00は、$today = 12365699(適当)。 一日は、60秒×60×24 = 86400。$day = 86400 一週間後なので、7回ループさせて表示させるのはどうでしょうか。 <select name=day> for($i = '0'; $i <= '7'; $i++){  $today = $today + (86400 * $i);  $week = date('Y/m/d', $today);  print "<option>". $week. "</option>\n"; } </select> ・インデント表示に全角を入れてあります ・検証していません ・もっとスマートな記述があるかもしれません

  • wp_
  • ベストアンサー率54% (132/242)
回答No.2

ぐふ。 explode()噛ましてない。 以下が正しいです。 list($y,$m,$d) = explode(',',date('Y,m,d',time() + $ii * 60*60*24)); 確認したしましたがフォーマットYmdは既に0詰めされていますね。

oxfax
質問者

お礼

ありがとうございます。 リストの表示はできたのですがデータベースに格納したときに 例えば2008/01/16だと"/"が割り算となり値が125として入ってしまうのですが・・・ "-"だと引き算になり他の記号はエラーになってしまいます。 データベースではchar型で日付を入れています。 また、このプログラムでデータベースに入れて値を取り出すときに さらにこの日付の1週間後を計算することはできるのでしょうか? 例) 購入履歴と有効期限の関係のように 2008/01/16を格納して別のページで 2008/01/16と2008/01/23を取り出すなど

  • wp_
  • ベストアンサー率54% (132/242)
回答No.1

date()の第二引数で翌日以降を指定しましょう。 echo "<select>\n"; for($ii=0;$ii<7;$ii++) {  list($y,$m,$d) = date('Y,m,d',time() + $ii * 60*60*24);  echo "<option>".$y.'/'.$m.'/'.$d."</option>\n"; } echo "</select>"; // 0詰めしてないので結果は少し違うかもしれませんが。

関連するQ&A

  • リストボックスを使って検索フォームを作りたいのですが

    教えて!gooの質問フォームのようなものが作りたいのですが出来なくて困っています。 リストボックスを2つ設けて、最初のリストボックスから選んだ項目によって、次のリストボックスに表示させる項目を選択したいのですが。 例えば、下のlist1のリストボックスから「名前」を選んだ場合にはlist2のリストボックスに氏名を、「日付」を選んだ場合には日付をリストに表示したいですが... <SELECT name="list1"><OPTION value=default>検索項目</OPTION> <option value=name>名前</option>); <option value=date>日付</option>); <option value=team>チーム</option>); </SELECT> <SELECT name="list2"><OPTION value=default>氏名</OPTION> <option value=suzuki>鈴木</option>); <option value=sato>佐藤</option>); <option value=tanaka>田中</option>); </SELECT> <SELECT name="list2"><OPTION value=default>日付</OPTION> <option value=2004>2004年度</option>); <option value=2003>2003年度</option>); <option value=2002>2002年度</option>); </SELECT> 書き方や説明が分かりにくいかもしれませんが、よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPで日付の範囲検索

    PHPを使って日付の範囲検索を実装しています。日付をセレクトフォームで選択し、該当する日時をSELECT文で記述するという流れです。イメージは以下のような感じですが、大体合っていますか? <? php if (!empty(filter_input(INPUT_POST, 'day'))) { $day = filter_input(INPUT_POST, 'day'); ・・・・ SELECT 文   ・・・・ ?> <html> <div class="search"> <form method="post"> <select name="year"> <?php for ($i=2000; $i <= 2021; $i++) { $year .= '<option value="'.$i.'">'.$i.'年</option>'; } ?> </select> <select name="month"> <?php for ($i=1; $i <= 12; $i++) { $month .= '<option value="'.$i.'">'.$i.'月</option>'; } ?> </select> <select name="day"> <?php for ($i=1; $i <= 31; $i++) { $day .= '<option value="'.$i.'">'.$i.'日</option>'; } ?> </select> <input type="hidden" name="search" value="<?php echo $_POST['year'].'-'. $_POST['month'].'-'. $_POST['date']; ?>"> <input type="submit" value="検索"> </form> </div> </html>

    • ベストアンサー
    • PHP
  • php メールフォーム日付チェック方法

    現在メールフォームで生年月日を記述しており、生年月日の値を確認画面に渡し、確認画面にて日付チェックをして、日付が間違っていたらフォーム画面に戻るということをやりたいのですが、日付チェックの部分で困っています。 例→2月20日は○  →2月30日は× form.php <?php //年の入力 print '<select name="year">' . "\n"; $start = date('Y') -29; $end = date('Y') -16; for ($i = $start; $i <= $end; $i++) { print '<option value="' . sprintf("%04d",$i) . '">' . sprintf("%04d",$i) . '</option>' . "\n"; } print '</select>年' . "\n"; //月の入力 print '<select name="month">' . "\n"; for ($i = 01; $i <= 12; $i++) { print '<option value="' . sprintf("%02d",$i) . '">' . sprintf("%02d",$i) . '</option>' . "\n"; } print '</select>月' . "\n"; //日の入力 print '<select name="day">' . "\n"; for ($i = 01; $i <= 31; $i++) { print '<option value="' . sprintf("%02d",$i) . '">' . sprintf("%02d",$i) . '</option>' . "\n"; } print '</select>日' . "\n"; ?> confirm.php //生年月日をチェック if (checkdate($month, $day, $year)) { $error[] = '生年月日が正しくありません。'; } という記述です。 この記述方法ですと、 2月20日は「生年月日が正しくありません。」とでてきますが、 2月31日を指定すると確認画面を通過できるという謎の状態になっています。 できれば閏年の計算もできる方法もお願いします。 どうかご教授お願いします。

    • ベストアンサー
    • PHP
  • MovableTypeで、ある日付を過ぎたものをリストからはずしたい。

    MovableTypeで、ある日付を過ぎたものをリストからはずしたい。 MovableTypeを使ってwebページを作っています。 日付カスタムフィールドをつくり、その日付(period_date)と現在の日付(current_date)を比べて、current_dateの方が大きければ(period_dateの日付を過ぎたら)、ブログ記事一覧に表示されないようにしたいのですが、うまくいきません。 記事を未公開にするのではなく、記事(エントリー)は公開のまま、「最新記事」などのエントリーリストからはずしたいのです。 以下のようにやってみましたが、だめでした。 <MTSetVarBlock name="current_date"> <?php print(date('Ymd')); ?> </MTSetVarBlock> <mt:Entries> <ul> <MTeventdate format="%Y%m%d" setvar="period_date" /> <mt:if name="period_date" ge="$current_date"> <li><mt:EntryTitle /></li> </mt:if> </ul> </mt:Entries> <MTSetVarBlock name="current_date">で、phpで今日の日付を取得し、変数current_dateに保存。 <MTeventdate format="%Y%m%d" setvar="entry_date" />で、カスタムフィールド<MTeventdate>の値(日付)を変数period_dateに保存。 <mt:if name="period_date" ge="$current_date">で、今日の日付よりも大きいものだけをフィルタ。 …のつもりなのですが、うまく表示されません。 すべての記事が表示されてしまいます。 どこをどう直せばいいでしょうか。 よろしくお願いします。

    • 締切済み
    • CSS
  • ラジオボタンとプルダウンで困っています。

    教えてgooの質問等を参考に携帯のサイトを作っております。 どうしても分からない部分がありましたので教えてください。 日付を選択するフォームを作成しており、内容は ラジオボタンで「今日の日付」「指定日」のどちらかを選択。 「指定日」を選択した場合は「指定日」の下にプルダウンで年月日を選択できるようにしております。 今日の日付は次のページにデータを渡すことができるのに 「指定日」の年月日はどうしても次のページに渡すことができません。 <form action=comf.php method=POST> <input type=radio checked name=day value="<?php echo"".$now_date = date("Ymd").""?>">1:今日 <br> <input type=radio name=day value=○○>3:指定日 <br> <select name="year" > <option value="2006">2006</option> </select> 年 <select name="month" > <option value="01">01</option> 月 <select name="date"> <<option value="01">01</option> 日 <input type=submit value="確認画面へ"> 指定日の「value=○○」には何を入れればよろしいのでしょうか? ご教授お願いいたします。

    • ベストアンサー
    • PHP
  • 日付のセレクトボックスで0付きの日付にしたい

    ネットで探した式を張り付ける位しかできない超初心者です。 以下のような当日表示の日付のセレクトボックス を探してペーストしたのですが1や2を01、02と表示しません。 これをどうやって直せば01,02,03,04,05と0付きの表示のセレクトボックスに 直せるでしょうか? どうぞよろしくお願いいたします。 <? $time = time(); $year = date("Y", $time); $month = date("n", $time); $day = date("j", $time); print("<select name=\"ayear\">"); //年は修正してください for( $i = 2010; $i <= 2020; $i++ ){ if( $i == $year ){ print("<option value=\"$i\" selected>$i</option>"); }else{ print("<option value=\"$i\">$i</option>"); } } print("</select>年"); print("<select name=\"amonth\">"); for( $j = 1; $j <= 12; $j++ ){ if( $j == $month ){ print("<option value=\"$j\" selected>$j</option>"); }else{ print("<option value=\"$j\">$j</option>"); } } print("</select>月"); print("<select name=\"aday\">"); for( $k = 1; $k <=31 ; $k++ ){ if( $k == $day ){ print("<option value=\"$k\" selected>$k</option>"); }else{ print("<option value=\"$k\">$k</option>"); } } print("</select>日"); ?>

    • ベストアンサー
    • PHP
  • 今日の日付を自動的にセレクトしたいのですが・・・。

    うまくできません。 どなたか助けていただけないでしょうか? よろしくおねがいします。 今のソースはこんな状態です。 onChange="setDate(this.form);"は4月の時に30日までとかにつかっています。 <!--最初に今日の日付を選択したい--> var date=new Date(); var year = date.getYear(); var year= (year< 2000) ? year+1900 : year; var mon=date.getMonth(); var day=date.getDate(); alert(mon); function setNow(form){ for(var i = 0;i<document.nanngatu.nanngatu.options.length;i++){ if(document.nanngatu.nanngatu.options[i].text==mon){ document.nanngatu.nanngatu.options.selectedIndex=i; break; } } } --間は省略-- <onLoad="setNow(this.form)" > <form name="nanngatu"> <select name="nanngatu" onChange="setDate(this.form);" > <option value="32">1</option> <option value="30">2</option> <option value="32">3</option> <option value="31">4</option> <option value="32">5</option> <option value="31">6</option> <option value="32">7</option> <option value="31">8</option> <option value="32">9</option> <option value="31">10</option> <option value="32">11</option> <option value="31">12</option> </select>月

  • プルダウンメニュー日付生成で月の変わり目について

    初心者です。 質問集をいろいろ探して日付生成できたのですが月末、月初がうまくいきません。 イヌでも・・やトホホ・・など探してますがマッチする情報が見つからないのでわかったら教えて下さい。 100にち分を表示するようにしてます。 このソースは短くてシンプルなので気に入ってます、 ======================================== <SCRIPT type="text/javascript"> window.onload = function() { var d, str, elm = document.getElementById('gdate'); var day = new Date(); day.setMilliseconds(24*60*60*1000); for (d=1; d<100; d++) { str = (day.getMonth() + 1) + '/' + (day.getDate() -1); elm.options[d] = new Option(str, str); day.setMilliseconds(24*60*60*1000); } } </SCRIPT><SELECT name="HIDUKE" id="gdate"> <OPTION>日付選択</OPTION> </SELECT> ======================================== あまり複雑にしないで解決する方法ありますか。

  • Postgreの日付関数に関して教えてください。

    Postgreの日付関数に関して教えてください。 表9.30 日付/時刻関数の例を実行していますが、 make_ で始まる関数がすべて失敗します。 PostgreSQL 9.6.2文書 9.9. 日付/時刻関数と演算子 https://www.postgresql.jp/document/9.6/html/functions-datetime.html 表9.30 日付/時刻関数 select age(timestamp '2001-04-10', timestamp '1957-06-13') select age(timestamp '1957-06-13')  : : select make_date(2013, 7, 15) select make_interval(days => 10) select make_time(8, 15, 23.5) select make_timestamp(2013, 7, 15, 8, 15, 23.5) select make_timestamptz(2013, 7, 15, 8, 15, 23.5) make_dateの失敗のメッセージ ERROR: function make_date(integer, integer, integer) does not exist LINE 1: select make_date(2013, 7, 15) ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. ********** エラー ********** ERROR: function make_date(integer, integer, integer) does not exist SQLステート:42883 ヒント:No function matches the given name and argument types. You might need to add explicit type casts. 文字:8 何が悪いのでしょうか。

  • 日付を入力するには?

    PHP+SQLサーバ2003でWEB作成をしています。 PHPでPOSTされた年月日をSQLサーバのカラム(smalldate型)に格納したいのですが、入力された通りにはDBに日付が格納されないのです。 例)2007/10/10 → (DB)1905/06/14 ソースはこんな感じです。 //年、月、日と入力された値を"年/月/日" の形にする $day = implode("/",array($_POST["year"],$_POST["month"],$_POST["day"])); //入力された日付をDBに格納する。 $sql = "insert into table_name(date) values($day)"; 根本的に何かが間違っていると思われるのですが、よくわかりません。 どなたかアドバイスお願いします。