在格式错误的两个日期字段之间搜索


Search between two date fields in wrong format

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

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

谢谢

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

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

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

然后删除旧字段sessionend,并将字段new_field重命名为 sessionend


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

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

但这将忽略字段 sessionend 上的任何索引,并循环访问表中的所有记录。

使用 strtotime() 和 date():

$originalDate = "Sep 10, 2013 2:33 AM";
$newDate = date("Y-m-d H:i:s", strtotime($originalDate));
您可以使用

strtotime()将时间彼此分开:这将转换为Unix时间戳

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