我有一个奇怪的问题。我试图将一些值插入到具有相应日期的数据库中。在HTML表单中,日期格式为mm / dd / yyyy格式。我使用以下PHP (from stackoverflow answer)将此格式转换为mysql yyyy-mm-dd
格式:
echo $date1 = str_replace("/","-",$_POST['date']);
echo $date = date('Y-m-d', strtotime($date1));
但是上面的回声,当我运行代码时它显示如下:
07-30-2012 1970-01-01
答案 0 :(得分:3)
通过查看各个组件之间的分隔符来消除m / d / y或d-m-y格式的日期:如果分隔符是斜杠(/),则假设为美国m / d / y;而如果分隔符是破折号( - )或点(。),则假定为欧洲d-m-y格式。有关详细信息,请参阅http://php.net/manual/en/function.strtotime.php。
所以即使你传递'07 -30-2012'作为输入,它也会考虑07作为日期,30作为月份,因此你得到的结果不正确。
以下应该工作
echo $date = date('Y-m-d', strtotime($_POST['date']));
答案 1 :(得分:1)
echo $date = preg_replace('/^(\d\d)\/(\d\d)\/(\d{4})$/', '$3-$1-$2', $_POST['date']);
我认为此代码应该可以正常工作,但当然在将其插入数据库之前必须进行所有必要的检查。
答案 2 :(得分:1)
echo $date1 = str_replace("/","-","$_POST['date']");
echo $date = date('Y-m-d', strtotime($date1));
在日期中加上双引号然后你得到完美的结果
答案 3 :(得分:0)
我刚试过:
$date = "30/07/2012";
echo $date1 = str_replace("/","-",$date);
echo '<br />';
echo $date = date('Y-m-d', strtotime($date1));
它实际上正在回归:
30-07-2012
2012-07-30
您应该检查$ _POST ['date']格式。
答案 4 :(得分:0)
echo $date = date('Y-m-d', strtotime($_POST['date']));
您的第一行不正确,返回false,其中(转换为整数)为0,0是linux机器上的开始时间! (因此1970-01-01)
答案 5 :(得分:0)
您的输入采用mm/dd/yyyy
格式,这意味着您应该使用斜杠/
如果使用dd-mm-yyyy
格式,则需要更改为破折号,如答案所示链接到。因此,在您的情况下,您不应该替换/
。