strtotime没有以正确的格式返回

时间:2013-02-13 20:52:29

标签: php

我有一些改变从数据库中检索时间格式的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在格式化之前都在m-d-Y中,它也不会将它们识别为dates。我觉得我很遗憾这是一件非常愚蠢的事情,但我却看不到它。

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

2 个答案:

答案 0 :(得分:3)

http://www.php.net/manual/en/datetime.formats.php,列表位于:http://www.php.net/manual/en/datetime.formats.date.php

strtotime()无法识别'm-d-Y'格式。

它被解释为最初采用'd-m-Y'格式。 '02 -13-2013'被解释为'2013年第13个月',无效因此输出了unix时期。

你可以尝试用斜杠替换' - '然后它将匹配格式1(m / d / Y)

答案 1 :(得分:2)

通过查看各个组件之间的分隔符来消除m / d / y或d-m-y格式的日期:如果分隔符是斜杠(/),则假设为美国m / d / y;而如果分隔符是破折号( - )或点(。),则假定为欧洲d-m-y格式。

为避免潜在的歧义,最好尽可能使用ISO 8601(YYYY-MM-DD)日期或DateTime :: createFromFormat()。

请使用以下方式

$ date = DateTime :: createFromFormat('m-d-Y','02 -14-2013'); echo $ date-&gt;格式('Y-m-d');