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>
と正しく表示させるにはどうすればいいでしょうか?
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;
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
となると思います
No.8
- 回答日時:
mysqlのdate型についてよく知る必要があります。
http://dev.mysql.com/doc/refman/4.1/ja/date-and- …
http://dev.mysql.com/doc/refman/4.1/ja/date-and- …
> $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"]);
とすべきでしょう。
No.6
- 回答日時:
>リストの表示はできたのですがデータベースに格納したときに
>例えば2008/01/16だと"/"が割り算となり値が125として入ってしまうのですが・・・
>"-"だと引き算になり他の記号はエラーになってしまいます。
>データベースではchar型で日付を入れています。
日付はdate型でしょう・・・
INSERTやUPDATEする際に、きちんとクォーテーションでくくってますか?
SET `日付`='2008/01/16'とすればよいですが、
SET `日付`=2008/01/16ではだめです。
なお/と-は混在さえしなければmysql側で自動的に判断してくれますので
どちらでもOKです。
また、mysqlからとりだした日付データはPHP側でstrtotime()して日付
としてあつかい、表示の際にdate()で整形してやればよいでしょう
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"));
でいけます。
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;
?>
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>
・インデント表示に全角を入れてあります
・検証していません
・もっとスマートな記述があるかもしれません
No.2
- 回答日時:
ぐふ。
explode()噛ましてない。
以下が正しいです。
list($y,$m,$d) = explode(',',date('Y,m,d',time() + $ii * 60*60*24));
確認したしましたがフォーマットYmdは既に0詰めされていますね。
ありがとうございます。
リストの表示はできたのですがデータベースに格納したときに
例えば2008/01/16だと"/"が割り算となり値が125として入ってしまうのですが・・・
"-"だと引き算になり他の記号はエラーになってしまいます。
データベースではchar型で日付を入れています。
また、このプログラムでデータベースに入れて値を取り出すときに
さらにこの日付の1週間後を計算することはできるのでしょうか?
例)
購入履歴と有効期限の関係のように
2008/01/16を格納して別のページで
2008/01/16と2008/01/23を取り出すなど
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で質問しましょう!
似たような質問が見つかりました
- JavaScript console.logがどうしても2つ機能しないのでアドバイスをくださいお願いします 2 2022/07/07 22:13
- JavaScript セレクトボックスで配列を呼び出したい。 1 2022/07/08 20:14
- JavaScript 以前の質問だと、どの条件でも配列が表示されてしまいます。 1 2022/07/09 11:40
- JavaScript セレクトボックスを2つ選択してメッセージなどを表示するには。~運賃検索プログラムを完成させたい~ 1 2022/07/22 11:10
- JavaScript JavascriptからSQLへ繋ぎ方が分からない 3 2022/07/07 00:27
- JavaScript 電車の運賃を出すプログラムを作っています。 2 2022/06/22 09:36
- JavaScript 1度きりではなく、繰り返し、挙動が変わるようにしていただきたいです。 1 2022/07/03 15:50
- JavaScript セレクトを全て選択されていないと、文字によるエラーメッセージを表示させるコードを調べています 2 2023/06/22 15:48
- JavaScript 中百舌鳥駅と深井駅を入れ替えて選択しても同じ挙動にしたいです。 2 2022/06/24 18:45
- JavaScript 2段階プルダウンで1段階目の選択を終えた後に選択ボックスを見えなくしたい 2 2022/07/05 21:58
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
開始と終了を指定して、その間...
-
substrの使い方について教えて...
-
C言語でシステム日付との差を...
-
差分の月数を算出する方法
-
Accessで、DAOでAddnew
-
SQL:TIMESTAMPの期間検索を指...
-
php カレンダーの休み表示
-
Dosブロンプトでtabを出力したい
-
wordの差し込み印刷で文字...
-
Yahoo! JAPAN IDを新規取得でき...
-
VB.NETからVBAマクロ(引数)を呼...
-
phpでcookieがうまく保存されない
-
switch()文で値の大小比較
-
VB or VBScriptでPCの製造番号...
-
(Win32)ファイルパスから物理ド...
-
PHPのセッション有効期限について
-
$_SESSIONと、POSTやGETの違い
-
findstrのerrorlevel
-
コンピューター名を取得したい
-
【C#】DataGridViewの最大列数...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
開始と終了を指定して、その間...
-
ファイル名に日付の挿入
-
アップロードしたファイル名に...
-
昨日の日付を取得するVBscript
-
C言語でシステム日付との差を...
-
C言語を使って、ある特定の日の...
-
Accessコンボボックス
-
現在時刻をyyyymmddhhmmss形式...
-
月曜日から始まる週間カレンダ...
-
6ヶ月前の日付を取得するにはど...
-
MySQLのdate型をphpで○年○月○日...
-
今日の日付から1週間のリスト
-
MYSQLの日付から現在までの年数...
-
ASP 年度年齢の計算
-
ESXiのdateコマンドについて
-
PHP 指定した期間だけ表示した...
-
改行されないカレンダー(PHP)
-
VBAでのDATEについて
-
シェルスクリプト:N日前の日付...
-
rss2.0<pubDate>の日付整形
おすすめ情報