0

我有一个表,其中日期列(会话结束)值如下所示:

Sep 10, 2013 2:33 AM

这是我的用户输入日期:

$convertedStart = '2013-08-01 00:00:01';
$convertedEnd = '2013-10-15 23:59:59';

这是我的查询

"SELECT * FROM `tictoc` WHERE sessionend BETWEEN '".$convertedStart."' AND '".$convertedEnd."'"

我如何转换来自数据库的时间,以便我可以使用这种格式进行搜索:

yyy-mm-dd 00:00:00

谢谢

4

3 回答 3

4

最好的解决方案是将您的日期时间格式转换为本机格式。

将新字段作为类型添加new_field到表中。DATETIME然后运行查询:

UPDATE `tictoc`
SET `new_field` = STR_TO_DATE(`sessionend`, '%b %e, %Y %l:%i %p');

然后删除您的旧字段sessionend,并将字段重命名new_fieldsessionend.


您仍然可以像这样运行查询:

SELECT * 
FROM `tictoc` 
WHERE STR_TO_DATE(`sessionend`, '%b %e, %Y %l:%i %p') BETWEEN '$convertedStart' AND '$convertedEnd'

但这将忽略 field 上的任何索引sessionend,并遍历表中的所有记录。

于 2013-10-16T16:13:27.373 回答
0

使用 strtotime() 和 date():

$originalDate = "Sep 10, 2013 2:33 AM";
$newDate = date("Y-m-d H:i:s", strtotime($originalDate));
于 2013-10-15T21:41:09.117 回答
0

您可以使用 strtotime() 将时间彼此分开:这将转换为 unix 时间戳

但是如果你想把它变成一个日期,请使用 date('Ymd H:i:s', $variable)

于 2013-10-15T21:45:17.843 回答