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-d用于输出,我得到2013-12-02的不是2013-02-12. 更不用说,即使所有$selectedDate's 在m-d-Y格式化之前都在,它也不会将它们识别为dates. 我有一种感觉,我错过了一些完全愚蠢的东西,但我就是看不到它。

所以我的问题是,为什么strtotime()我的月份和日期会颠倒过来,为什么它不能识别所有日期?有没有更好的方法来完成这项工作?

4

2 回答 2

3

根据http://www.php.net/manual/en/datetime.formats.php和列表:http ://www.php.net/manual/en/datetime.formats.date.php

strtotime() 无法识别“mdY”格式。

它被解释为最初采用“dmY”格式。'02-13-2013' 被解释为 '2nd of 13th Month 2013' 这是无效的,因此输出的是 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 回答