我有一些改变从数据库中检索时间格式的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()
会扭转我的月份和日期,为什么它不能识别所有日期?有没有更好的方法来完成这项工作?
答案 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');