转换 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
我知道这个问题已经被问过很多次了,但对我没有任何帮助。
我想从输入中提取日期并将其存储在我的数据库 (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