2

データベースから取得した時刻の形式を変更するphpがいくつかあります。

$selectedDate = $_GET['date'];
$formatedDate = date("Y-d-m",strtotime($selectedDate)); // Y-m-d outputs Y-d-m oddly

echo "<form name='selectedDate' action='info.php' method='GET'>";
    echo "<select name='date' onchange='this.form.submit()'>";
    echo "<option value=select>Select a Date</option>";
        while ($row = mysql_fetch_array($result))
        {
            $date = date("m-d-Y",strtotime($row['date']));          
            echo "<option>" . $date . "</option>";
        }
        echo "</select>";echo "<br />";

            echo $selectedDate; // 1.) in: 02-13-2013, 2.) in: 02-12-2013
            echo "<br />";
            echo $formatedDate; // 1.) out: 1970-01-01, 2.) out: 2013-02-12
            echo "<br />";
        echo date("Y-m-d");

    echo "<noscript>";
    echo "<input type='submit' value='Select'>";
    echo "</noscript>";
    echo "</form>";

さて、前述のように、出力$formatedDateに使用すると、の代わりに取得します。言うまでもなく、すべてのがフォーマットされる前に含まれていても、それらはとして認識されません。見落としているのは全く馬鹿げている気がしますが、見えません。Y-m-d2013-12-022013-02-12$selectedDatem-d-Ydates

だから私の質問は、なぜstrtotime()私の月と日を逆にするのですか、そしてなぜそれはすべての日付を認識しないのですか?これを行うためのより良い方法はありますか?

4

2 に答える 2

3

http://www.php.net/manual/en/datetime.formats.phpおよびリスト:http : //www.php.net/manual/en/datetime.formats.date.php

'mdY'形式はstrtotime()によって認識されません。

元々は「dmY」形式であると解釈されています。「02-13-2013」は「2013年13月2日」と解釈されますが、これは無効であるため、UNIXエポックが出力されます。

'-'をスラッシュに置き換えてみると、フォーマット1(m / d / Y)に一致します。

于 2013-02-13T21:04:31.170 に答える
2

m / d / yまたはdmy形式の日付は、さまざまなコンポーネント間のセパレーターを調べることで明確になります。セパレーターがスラッシュ(/)の場合、アメリカのm / d/yが想定されます。一方、区切り文字がダッシュ(-)またはドット(。)の場合、ヨーロッパのdmy形式が想定されます。

あいまいさの可能性を回避するために、可能な場合はISO 8601(YYYY-MM-DD)の日付またはDateTime :: createFromFormat()を使用することをお勧めします。

以下の方法でご利用ください

$ date = DateTime :: createFromFormat('mdY'、 '02-14-2013'); echo $ date-> format('Ymd');

于 2013-02-13T21:09:17.940 に答える