我知道这个问题已被多次询问,但对我没什么用。
我想从输入中提取日期并将其存储在我的数据库(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
答案 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对象具有更复杂的解析日期的工具。