0

我有一个奇怪的问题。我正在尝试将一些值插入到具有相应日期的数据库中。在 HTML 表单中,日期格式为 mm/dd/yyyy 格式。yyyy-mm-dd我使用以下 PHP (来自 stackoverflow 答案)将此格式转换为 mysql格式:

echo $date1 = str_replace("/","-",$_POST['date']);
echo $date = date('Y-m-d', strtotime($date1));

但是上面的 echo ,当我运行代码时,它显示如下: 07-30-2012 1970-01-01

4

6 回答 6

3

m/d/y 或 dmy 格式的日期通过查看各个组件之间的分隔符来消除歧义:如果分隔符是斜杠 (/),则假定为美式 m/d/y;而如果分隔符是破折号 (-) 或点 (.),则假定为欧洲 dmy 格式。有关详细信息,请参阅http://php.net/manual/en/function.strtotime.php

因此,即使您将“07-30-2012”作为输入传递,它也将 07 视为日期,将 30 视为月份,因此您得到的结果不正确。

以下应该工作

echo $date = date('Y-m-d', strtotime($_POST['date']));
于 2012-07-30T05:40:08.040 回答
1
echo $date = preg_replace('/^(\d\d)\/(\d\d)\/(\d{4})$/', '$3-$1-$2', $_POST['date']);

我认为这段代码应该可以正常工作,但当然您必须在将其插入数据库之前进行所有必要的检查。

于 2012-07-30T05:36:31.267 回答
1
echo $date1 = str_replace("/","-","$_POST['date']");
echo $date = date('Y-m-d', strtotime($date1));

在日期中加上双引号,然后你会得到完美的结果

于 2012-07-30T05:38:45.447 回答
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'] 格式。

于 2012-07-30T05:34:08.890 回答
0

echo $date = date('Y-m-d', strtotime($_POST['date']));

你的第一行不正确,它返回false,它(转换为整数)是0,0是linux机器上时间的开始!(因此 1970-01-01)

于 2012-07-30T05:39:38.367 回答
0

您的输入是mm/dd/yyyy格式,这意味着您应该使用斜杠/如果您使用dd-mm-yyyy格式,则需要更改为破折号,如您链接到的答案所示。所以在你的情况下,你不应该更换/.

于 2012-07-30T05:40:14.940 回答