1

フォーム送信から日付/時刻の個々の値を取得し、それらを特定の形式の日付に解析しようとしています。

検証が何らかの理由で失敗した場合 (例: 2 月 30 日、13 か月目など)、結果はデフォルトで現在の時刻になります。

if (isset($_POST['year'], $_POST['month'], $_POST['day'], $_POST['hour'], $_POST['minute']))
{
    $y = $_POST['year'];
    $m = $_POST['month'];
    $d = $_POST['day'];
    $h = $_POST['hour'];
    $i = $_POST['minute'];
    if (checkdate($m, $d, $y))
    {
        if ($h >= 0 && $h <= 23)
        {
            if ($i >= 0 && $i <= 59)
            {
                $str = $y.'-'.$m.'-'.$d.' '.$h.':'.$i.':00';
                $time = strtotime($str);
            }
            else $time = time();
        }
        else $time = time();
    }
    else $time = time();
}
else $time = time();

$datetime = date('D j M Y - H:i:s T', $time);
echo $datetime;

私が理解していない2つのことが起こります:

  • 1 つ以上の日付値が欠落している場合、checkdate() に関するエラーが表示されます...最初の if() で検証が失敗しない理由がわかりません

  • 1 つ以上の時間値が欠落している場合、最終結果は UNIX エポック?!

4

2 に答える 2

5

1 つ以上の日付値が欠落している場合、checkdate() に関するエラーが表示されます...最初の if() で検証が失敗しない理由がわかりません

設定されていることと有効な値を持つことは、2 つの異なることです。変数を設定して、空の文字列または null を含めることができます。を使用して、これらの値に実際に値が含まれていることを確認してくださいempty()

1 つ以上の時間値が欠落している場合、最終結果は UNIX エポック?!

date()無効な 2 番目のパラメーター (つまり、有効な UNIX タイムスタンプ)を渡すと、デフォルトでエポックになります。

于 2013-09-06T18:04:26.047 に答える
1

checkdata 実行前の空の値チェック

<?php
if(!empty($y) && !empty($m) && !empty($d) && !empty($h) && !empty($i))
{
    if (checkdate($m, $d, $y))
    {
        if ($h >= 0 && $h <= 23)
        {
            if ($i >= 0 && $i <= 59)
            {
                $str = $y.'-'.$m.'-'.$d.' '.$h.':'.$i.':00';
                $time = strtotime($str);
            }
            else $time = time();
        }
        else $time = time();
    }
    else $time = time();
}
else $time = time();

$datetime = date('D j M Y - H:i:s T', $time);
echo $datetime;

?>
于 2013-09-06T18:17:27.537 に答える