PHPで次のプログラムを作成してください。


下記の3つのパターンに対応したフォームを作成し、その日時をechoしてください。
①現在からの日時を指定(例)「0日0時5分」と指定したら現在から5分後の時間をechoさせる。
②直接日時を指定(例)「5月26日7時28分」と指定したらそのままずばりechoさせる。
③上記いずれの指定もない場合、デフォルトして現在の日時がechoされる。

複数のフォームを使い分けて何時間何分後かあるいは直接時間を指定するというのがどうしてもうまくいきません。

また下記の点にもご留意くださいますようお願いします。
①は指定したもの以外は自動的に0となる。分を5だけと指定したら、現在から5分後がechoされる。
今年か来年だけを考慮していただければいいので、現在月が5月で②で「3月」と指定した場合、来年の3月ということでお願いしまいます。
セキュリティは考慮していただく必要はありません。
フォームのタイプはselectでもtextでも問題ありません。

Vista、IE、Firefox、最新のXampp、PHP5、 EclipsePDT2を使ってます。
以上よろしくお願いします。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2010/05/23 15:24:34
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:rouge_2008 No.1

回答回数595ベストアンサー獲得回数351

ポイント200pt

複数のフォームを用意する場合

<html>
<head>
<title>日時表示</title>
</head>
<body>
<div>
<h1>日時表示</h1>
<?php

if(!$_POST) {
    echo "現在の時刻:" . date("Y/n/j H時i分") ."<br>\r\n";
} else {
    echo "<h2>リクエストの結果</h2>\r\n";
    $mon = $_POST["mon"];
    $day = $_POST["day"];
    $hour = $_POST["hour"];
    $min = $_POST["min"];
    if($_POST["btn1"]) {
        $today = getdate();
        $year = ($mon < $today["mon"]) ? $today["year"] + 1 : $today["year"];
        echo "指定日時:" . $year. "/" . $mon. "/" . $day . " " . $hour . "時" . $min . "分<br>\r\n";
    } 
    if ($_POST["btn2"]) {
        echo "指定日時 " . $day . "日" . $hour . "時間" . $min . "分後:";
        $day = $day * 24 * 60 * 60;
        $hour = $hour * 60 * 60;
        $min = $min * 60;
        $time = $day + $hour + $min;
        $reqday = time() + $time;
        echo date("Y/n/j H時i分", $reqday) . "<br>\r\n";
    }
}

?>
<h3>フォーム1</h3>
<form action="" method="POST">
<select name="mon">
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    <option value="4">4</option>
    <option value="5">5</option>
    <option value="6">6</option>
    <option value="7">7</option>
    <option value="8">8</option>
    <option value="9">9</option>
    <option value="10">10</option>
    <option value="11">11</option>
    <option value="12">12</option>
</select>月
<select name="day">
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    <option value="4">4</option>
    <option value="5">5</option>
    <option value="6">6</option>
    <option value="7">7</option>
    <option value="8">8</option>
    <option value="9">9</option>
    <option value="10">10</option>
    <option value="11">11</option>
    <option value="12">12</option>
    <option value="13">13</option>
    <option value="14">14</option>
    <option value="15">15</option>
    <option value="16">16</option>
    <option value="17">17</option>
    <option value="18">18</option>
    <option value="19">19</option>
    <option value="20">20</option>
    <option value="21">21</option>
    <option value="22">22</option>
    <option value="23">23</option>
    <option value="24">24</option>
    <option value="25">25</option>
    <option value="26">26</option>
    <option value="27">27</option>
    <option value="28">28</option>
    <option value="29">29</option>
    <option value="30">30</option>
    <option value="31">31</option>
</select>日
<select name="hour">
    <option value="0">0</option>
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    <option value="4">4</option>
    <option value="5">5</option>
    <option value="6">6</option>
    <option value="7">7</option>
    <option value="8">8</option>
    <option value="9">9</option>
    <option value="10">10</option>
    <option value="11">11</option>
    <option value="12">12</option>
    <option value="13">13</option>
    <option value="14">14</option>
    <option value="15">15</option>
    <option value="16">16</option>
    <option value="17">17</option>
    <option value="18">18</option>
    <option value="19">19</option>
    <option value="20">20</option>
    <option value="21">21</option>
    <option value="22">22</option>
    <option value="23">23</option>
</select>時
<select name="min">
    <option value="0">0</option>
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    <option value="4">4</option>
    <option value="5">5</option>
    <option value="6">6</option>
    <option value="7">7</option>
    <option value="8">8</option>
    <option value="9">9</option>
    <option value="10">10</option>
    <option value="11">11</option>
    <option value="12">12</option>
    <option value="13">13</option>
    <option value="14">14</option>
    <option value="15">15</option>
    <option value="16">16</option>
    <option value="17">17</option>
    <option value="18">18</option>
    <option value="19">19</option>
    <option value="20">20</option>
    <option value="21">21</option>
    <option value="22">22</option>
    <option value="23">23</option>
    <option value="24">24</option>
    <option value="25">25</option>
    <option value="26">26</option>
    <option value="27">27</option>
    <option value="28">28</option>
    <option value="29">29</option>
    <option value="30">30</option>
    <option value="31">31</option>
    <option value="32">32</option>
    <option value="33">33</option>
    <option value="34">34</option>
    <option value="35">35</option>
    <option value="36">36</option>
    <option value="37">37</option>
    <option value="38">38</option>
    <option value="39">39</option>
    <option value="40">40</option>
    <option value="41">41</option>
    <option value="42">42</option>
    <option value="43">43</option>
    <option value="44">44</option>
    <option value="45">45</option>
    <option value="46">46</option>
    <option value="47">47</option>
    <option value="48">48</option>
    <option value="49">49</option>
    <option value="50">50</option>
    <option value="51">51</option>
    <option value="52">52</option>
    <option value="53">53</option>
    <option value="54">54</option>
    <option value="55">55</option>
    <option value="56">56</option>
    <option value="57">57</option>
    <option value="58">58</option>
    <option value="59">59</option>
</select>分
<input type="submit" name ="btn1" value="送信"><br>
</form>
<h3>フォーム2</h3>
<form action="" method="POST">
<input type="text" name="day" size="5">日
<select name="hour">
    <option value="0">0</option>
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    <option value="4">4</option>
    <option value="5">5</option>
    <option value="6">6</option>
    <option value="7">7</option>
    <option value="8">8</option>
    <option value="9">9</option>
    <option value="10">10</option>
    <option value="11">11</option>
    <option value="12">12</option>
    <option value="13">13</option>
    <option value="14">14</option>
    <option value="15">15</option>
    <option value="16">16</option>
    <option value="17">17</option>
    <option value="18">18</option>
    <option value="19">19</option>
    <option value="20">20</option>
    <option value="21">21</option>
    <option value="22">22</option>
    <option value="23">23</option>
    <option value="24">24</option>
</select>時間
<select name="min">
    <option value="0">0</option>
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    <option value="4">4</option>
    <option value="5">5</option>
    <option value="6">6</option>
    <option value="7">7</option>
    <option value="8">8</option>
    <option value="9">9</option>
    <option value="10">10</option>
    <option value="11">11</option>
    <option value="12">12</option>
    <option value="13">13</option>
    <option value="14">14</option>
    <option value="15">15</option>
    <option value="16">16</option>
    <option value="17">17</option>
    <option value="18">18</option>
    <option value="19">19</option>
    <option value="20">20</option>
    <option value="21">21</option>
    <option value="22">22</option>
    <option value="23">23</option>
    <option value="24">24</option>
    <option value="25">25</option>
    <option value="26">26</option>
    <option value="27">27</option>
    <option value="28">28</option>
    <option value="29">29</option>
    <option value="30">30</option>
    <option value="31">31</option>
    <option value="32">32</option>
    <option value="33">33</option>
    <option value="34">34</option>
    <option value="35">35</option>
    <option value="36">36</option>
    <option value="37">37</option>
    <option value="38">38</option>
    <option value="39">39</option>
    <option value="40">40</option>
    <option value="41">41</option>
    <option value="42">42</option>
    <option value="43">43</option>
    <option value="44">44</option>
    <option value="45">45</option>
    <option value="46">46</option>
    <option value="47">47</option>
    <option value="48">48</option>
    <option value="49">49</option>
    <option value="50">50</option>
    <option value="51">51</option>
    <option value="52">52</option>
    <option value="53">53</option>
    <option value="54">54</option>
    <option value="55">55</option>
    <option value="56">56</option>
    <option value="57">57</option>
    <option value="58">58</option>
    <option value="59">59</option>
    <option value="60">60</option>
</select>分後
<input type="submit" name ="btn2" value="送信"><br>
</form>

</div>
</body>
</html>

※フォームのサブミットボタンに名前をつけて判別しています。


一つのフォームに実装する場合

<html>
<head>
<title>日時表示</title>
</head>
<body>
<div>
<h1>日時表示</h1>
<?php

if(!$_POST) {
    echo "現在の時刻:" . date("Y/n/j H時i分") ."<br>\r\n";
} else {
    echo "<h2>リクエストの結果</h2>\r\n";
    $mon = $_POST["mon"];
    $day = $_POST["day"];
    $hour = $_POST["hour"];
    $min = $_POST["min"];
    if($_POST["mon"] && $_POST["day"]) {
        $today = getdate();
        $year = ($mon < $today["mon"]) ? $today["year"] + 1 : $today["year"];
        echo "指定日時:" . $year. "/" . $mon. "/" . $day . " " . $hour . "時" . $min . "分<br>\r\n";
    } elseif ($_POST["day"] || $_POST["hour"] || $_POST["min"]) {
        echo $day . "日" . $hour . "時間" . $min . "分後:";
        $day = $day * 24 * 60 * 60;
        $hour = $hour * 60 * 60;
        $min = $min * 60;
        $time = $day + $hour + $min;
        $reqday = time() + $time;
        echo date("Y/n/j H時i分", $reqday) . "<br>\r\n";
    }
}

?>
<form action="" method="POST">
<select name="mon">
    <option value="0">0</option>
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    <option value="4">4</option>
    <option value="5">5</option>
    <option value="6">6</option>
    <option value="7">7</option>
    <option value="8">8</option>
    <option value="9">9</option>
    <option value="10">10</option>
    <option value="11">11</option>
    <option value="12">12</option>
</select>月
<select name="day">
    <option value="0">0</option>
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    <option value="4">4</option>
    <option value="5">5</option>
    <option value="6">6</option>
    <option value="7">7</option>
    <option value="8">8</option>
    <option value="9">9</option>
    <option value="10">10</option>
    <option value="11">11</option>
    <option value="12">12</option>
    <option value="13">13</option>
    <option value="14">14</option>
    <option value="15">15</option>
    <option value="16">16</option>
    <option value="17">17</option>
    <option value="18">18</option>
    <option value="19">19</option>
    <option value="20">20</option>
    <option value="21">21</option>
    <option value="22">22</option>
    <option value="23">23</option>
    <option value="24">24</option>
    <option value="25">25</option>
    <option value="26">26</option>
    <option value="27">27</option>
    <option value="28">28</option>
    <option value="29">29</option>
    <option value="30">30</option>
    <option value="31">31</option>
    <option value="32">32</option>
    <option value="33">33</option>
    <option value="34">34</option>
    <option value="35">35</option>
    <option value="36">36</option>
    <option value="37">37</option>
    <option value="38">38</option>
    <option value="39">39</option>
    <option value="40">40</option>
    <option value="41">41</option>
    <option value="42">42</option>
    <option value="43">43</option>
    <option value="44">44</option>
    <option value="45">45</option>
    <option value="46">46</option>
    <option value="47">47</option>
    <option value="48">48</option>
    <option value="49">49</option>
    <option value="50">50</option>
</select>日
<select name="hour">
    <option value="0">0</option>
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    <option value="4">4</option>
    <option value="5">5</option>
    <option value="6">6</option>
    <option value="7">7</option>
    <option value="8">8</option>
    <option value="9">9</option>
    <option value="10">10</option>
    <option value="11">11</option>
    <option value="12">12</option>
    <option value="13">13</option>
    <option value="14">14</option>
    <option value="15">15</option>
    <option value="16">16</option>
    <option value="17">17</option>
    <option value="18">18</option>
    <option value="19">19</option>
    <option value="20">20</option>
    <option value="21">21</option>
    <option value="22">22</option>
    <option value="23">23</option>
    <option value="24">24</option>
</select>時
<select name="min">
    <option value="0">0</option>
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    <option value="4">4</option>
    <option value="5">5</option>
    <option value="6">6</option>
    <option value="7">7</option>
    <option value="8">8</option>
    <option value="9">9</option>
    <option value="10">10</option>
    <option value="11">11</option>
    <option value="12">12</option>
    <option value="13">13</option>
    <option value="14">14</option>
    <option value="15">15</option>
    <option value="16">16</option>
    <option value="17">17</option>
    <option value="18">18</option>
    <option value="19">19</option>
    <option value="20">20</option>
    <option value="21">21</option>
    <option value="22">22</option>
    <option value="23">23</option>
    <option value="24">24</option>
    <option value="25">25</option>
    <option value="26">26</option>
    <option value="27">27</option>
    <option value="28">28</option>
    <option value="29">29</option>
    <option value="30">30</option>
    <option value="31">31</option>
    <option value="32">32</option>
    <option value="33">33</option>
    <option value="34">34</option>
    <option value="35">35</option>
    <option value="36">36</option>
    <option value="37">37</option>
    <option value="38">38</option>
    <option value="39">39</option>
    <option value="40">40</option>
    <option value="41">41</option>
    <option value="42">42</option>
    <option value="43">43</option>
    <option value="44">44</option>
    <option value="45">45</option>
    <option value="46">46</option>
    <option value="47">47</option>
    <option value="48">48</option>
    <option value="49">49</option>
    <option value="50">50</option>
    <option value="51">51</option>
    <option value="52">52</option>
    <option value="53">53</option>
    <option value="54">54</option>
    <option value="55">55</option>
    <option value="56">56</option>
    <option value="57">57</option>
    <option value="58">58</option>
    <option value="59">59</option>
    <option value="60">60</option>
</select>分
<input type="submit" value="送信"><br>
※月を指定しなかった場合、現在日時に指定した日数と時間を足して表示します。
</form>

</div>
</body>
</html>

※複数のフォームを用意する場合の処理を、こちらの条件分岐と同じに変更しても動作します。

id:taroemon

長文のご回答まことにありがとうございます。

当初思ってたよりも素晴らしくとても満足しています。

特に2つめのがデザイン的にも気に入っているのでこれを使いたいのですが、

「いずれの指定もない場合、デフォルトして現在の日時がechoされる。」というのが私の環境だとうまくいきません。

もし、何か思い当たることがありましたら、手直ししていただけると大変ありがたいです。

2010/05/23 12:46:25
  • id:rouge_2008
    すみません。
    PHPの処理の最後の部分(以下)を

    }
    }

    ?>

    次のように修正してください。

    } else {
    echo "現在の時刻:" . date("Y/n/j H時i分") ."<br>\r\n";
    }
    }

    ?>

    上記のように修正する事で正常に動作するはずです。
    もし、最初にページを表示した時(フォーム送信はしていない)に現在日時を表示しなくてもいい場合は、PHPの処理の最初の部分を次のように修正してください。

    //削除if(!$_POST) {
    //削除 echo "現在の時刻:" . date("Y/n/j H時i分") ."<br>\r\n";
    //削除} else {
    if ($_POST) { //上記最初の3行を削除してこの行を追加
    echo "<h2>リクエストの結果</h2>\r\n";
  • id:taroemon
    うまくいきました。
    僕もこれくらい自分でできなきゃいけませんね。
    いただいたソースを参考に勉強させていただきます。
    丁寧にありがとうございました。
  • id:rouge_2008
    希望にかなって良かったです。
    とてもたくさんのポイントといるかをありがとうございました。m(__)m
  • id:rouge_2008
    (2)について、月でしか判定していなかったので、日時分も判定条件に加えてみました。

    $year = ($mon < $today["mon"]) ? $today["year"] + 1 : $today["year"];

    上記の行の代わりに、以下を追加します。


    if ($mon <= $today["mon"]) {
    $year = ($day < $today["mday"]) ? $today["year"] + 1 : $today["year"];
    }
    $now = time();
    $req = mktime($hour, $min, $today["seconds"], $mon, $day, $year);
    $year = ($now >= $req) ? $today["year"] + 1 : $today["year"];

    もっとスマートな方法があるかもしれませんが、良かったらお試しください。

    ※三項演算子を積み重ねて使用することは避けるようにマニュアルに書いてありましたので、一部変更して再度コメントしています。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません