转换 SQL 的日期格式

Convert date format for SQL

我知道这个问题已经被问过很多次了,但对我没有任何帮助。

我想从输入中提取日期并将其存储在我的数据库 (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);

但是不行。

我输入的日期:17/07/2014 (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

您的代码有两个问题。

1) 插入语句有问题,在 ses_date 之后有一个错误的 , 2) date/time 格式传入错误。

$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));

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

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