为什么我的getTimestamp()方法在php中无法正常工作?

时间:2015-10-29 22:51:15

标签: php mysql

我有一个列类型的表:timestamp。 存储在那里的数据如下所示:

enter image description here

我想做一个简单的选择,找出给定的开始日期和结束日期之间是否有日期。

这是我到目前为止所做的事情:

$starttime = $_POST['starttime'];
$duration = 15;//$_POST['duration'];

$converted_date = DateTime::createFromFormat('Y-d-m H:i:s', $_POST['starttime']); // POST
$begin_timestamp = $converted_date->getTimestamp();

$quickReact = "SELECT start_time FROM commercial WHERE
 UNIX_TIMESTAMP(start_time) >= '$begin_timestamp' AND
 UNIX_TIMESTAMP(start_time) <('$begin_timestamp'+'$duration')";

值得一提的是,starttime是:2015-10-30 16:14:44。 现在,即使我的数据库中的结果应该适合我的查询 - 我也看不到它们,因为UNIX_TIMESTAMP(start_time)会以某种方式带来不正确的值并且无法解析数据。

我的php代码中的这部分不能正常工作:

$converted_date = DateTime::createFromFormat('Y-d-m H:i:s', $_POST['starttime']); // POST
$begin_timestamp = $converted_date->getTimestamp();

因为从2015-10-30 16:14:44作为参数给出,它返回时间戳:1497111284,它指向2017年的某个日期... 我该如何解决?

2 个答案:

答案 0 :(得分:3)

跳过转换:

$starttime = $mysqli->escape_string($_POST['starttime']);
$duration = 15;//$_POST['duration'];

$query = "SELECT start_time FROM commercial WHERE start_time >= '$starttime' AND start_time < '$begin_timestamp'+ INTERVAL $duration SECOND";

当然,您不应该将用户提供的数据注入SQL查询。这只是一个概念证明。

答案 1 :(得分:3)

没关系。

通过给它们提供字符串值来比较MySQL中的时间戳,并且MySQL有内置函数来帮助。

SELECT start_time FORM commercial
WHERE start_time BETWEEN ? AND DATE_ADD(?, INTERVAL ? SECOND)

这三个参数为$begin_timestamp两次,$duration为第三个(是的,使用参数!!它们存在的原因非常充分!)

我假设你的15是几秒钟。如果没有,只需将SECOND更改为您想要的任何单位。