转换SQL的日期格式

时间:2015-01-10 23:52:42

标签: php mysql date mysqli

我知道这个问题已被多次询问,但对我没什么用。

我想从输入中提取日期并将其存储在我的数据库(MySQLi)中。

这就是我试过的

$ses_s = $_POST['ses_date_s'];
$ses_n_s = date("Y-m-d", strtotime($ses_s));
$q = 'INSERT INTO date_t (ses_date_s,) VALUES (?)';
$stmt = mysqli_prepare($dbc, $q);
mysqli_stmt_bind_param($stmt, 's', $ses_n_s);
mysqli_stmt_execute($stmt);

但它不会起作用。

输入日期:2014年7月17日(echo $ ses_s)

转换日期:1970-01-01(Unix启动)($ ses_n_s)

我做错了什么?

P.S。如何在反向中提取日期,我希望日期显示为d / m / Y而不是Y / m / d(如DB中)?

提前致谢。

编辑:

我发现问题了(感谢Jonathan)我使用的是dd / mm / yyyy而不是mm / dd / yyy

所以,如果我可以改变我的问题,如何将dd / mm / yyy转换为yyyy / mm / dd

3 个答案:

答案 0 :(得分:2)

Maverick你可以爆发POST日期,然后按照你需要的数据顺序放置:

$ses_s = $_POST['ses_date_s']; //'17/07/2014';
$sespieces = explode("/", $ses_s);
$ses_n_s = $sespieces[2]."-".$sespieces[1]."-".$sespieces[0]; //2014-07-17

答案 1 :(得分:1)

您对代码有两个问题。

1)插入语句的问题,在ses_date之后有一个错误 2)错误传递的日期/时间格式。

$q = 'INSERT INTO date_t (ses_date_s,) VALUES (?)';

应该是

$q = 'INSERT INTO date_t (ses_date_s) VALUES (?)';

strtotime认为当地时间,通过dd / mm / yyyy(加拿大标准)并未得到广泛认可,在大多数情况下,它预计为mm / dd / yyyy(我们的标准)。

我建议您不要依赖strtotime来创建时间戳,并且会以mysql首选格式传递数据,或传递实际的时间戳本身。

至于实际从数据库中获取日期,strtotime可以正常处理来自mysql的数据,因为它将被正确识别。

因此,当您从数据库中提取时,您可以执行此操作。

echo date('d/m/Y' strtotime($date));

答案 2 :(得分:0)

$ _ POST ['ses_date_s']是字符串,但date()需要一个整数(Unix时间戳)。您可以使用strtotime()将前者转换为后者,尽管它只希望日期遵循美国惯例mm / dd / yy。 DateTime对象具有更复杂的解析日期的工具。