Php 注册时间字段前后10分钟的公差

Php 注册时间字段前后10分钟的公差,php,mysql,Php,Mysql,我知道这个标题看起来很混乱,但这是我能做的最接近我真正需要做的 让我试着解释一下,我的mySQL表中有一个列,其中有小时(字符串)、注册日期和访问代码字段 要重定向到所需页面,他需要填写访问代码的输入,当他填写并提交表格时,会进行一次完整的选择: $sql = 'SELECT agendamentos.data_agendada, agendamentos.codigo_acesso, horarios.horario

我知道这个标题看起来很混乱,但这是我能做的最接近我真正需要做的

让我试着解释一下,我的
mySQL
表中有一个
列,其中有小时(字符串)、注册日期和访问代码字段

要重定向到所需页面,他需要填写访问代码的
输入
,当他填写并提交
表格
时,会进行一次完整的
选择

$sql = 'SELECT
            agendamentos.data_agendada,
            agendamentos.codigo_acesso,
            horarios.horario
        FROM
            agendamentos
        INNER JOIN horarios ON agendamentos.horario_id = horarios.id
        WHERE
            agendamentos.aluno_codigopessoa = '.$usrs->codigoPessoa.'
            AND agendamentos.codigo_acesso = '.$_POST['acesso_chat'];

$statement = $db->prepare($sql);
$statement->execute();
$result = $statement->fetchAll();
如果访问代码存在,则返回我,他选择的小时和日期

我需要用一个新的
DateTime()
对象与结果的小时进行比较,但是,如果结果的hour不是在他选择的之前10分钟和之后10分钟内,我不能让他通过


我尝试了一些代码,我真的可以为
DateTime
的对象添加分钟,这就是我所做的,但是,我该如何做一个
if
语句来查看他选择的小时是否在当前时间之前10分钟和之后10分钟的时间段内?

你可以通过
PHP
MySQL
来完成:

PHP
版本:

//given your result is something like this:
$result = array(
    'codigo_acesso' => 'ABCDE',
    'data_agendada' => '2016-10-26',
    'horario'       => '14:00:00'
);


$timestamp = strtotime($result['data_agendada'] . ' ' . $result['horario']);
$now       = mktime();
$diff      = $now - $timestamp;
$tolerance = 10 * 60; //10 minutes

if (abs($diff) <= $tolerance) {
    //grant access
} else {
    //deny access
}
$tolerance = 10 * 60; //10 minutes

$sql = "SELECT
            agendamentos.data_agendada,
            agendamentos.codigo_acesso,
            horarios.horario
        FROM
            agendamentos
        INNER JOIN horarios ON agendamentos.horario_id = horarios.id
        WHERE
            agendamentos.aluno_codigopessoa = :codigo_pessoa
            AND agendamentos.codigo_acesso = :acesso_chat
            AND ABS(TIMESTAMPDIFF(SECOND, NOW(), STR_TO_DATE(CONCAT(agendamentos.data_agendada, ' ', horarios.horario), '%Y-%m-%d %H:%i:%s'))) <= " . $tolerance; //

$statement = $db->prepare($sql);
$statement->execute(array(
    ':codigo_pessoa' => $usrs->codigoPessoa,
    ':acesso_chat'   => $_POST['acesso_chat']
));
$result = $statement->fetchAll();

if (!empty($result)) {
    //grant access
} else {
    //deny access
}

更喜欢MySQL版本。

必须使用DateTimes吗?或者你能使用数据库吗?@bassxzero,这个列有一个特定的小时(例如:14:00:00),它是一个字符串,我需要做的是在这个结果前后确定10分钟的公差,他们仍然可以从13:50:00访问到14:10:00是的,我知道了,但是为什么你不使用时间戳或时间?MySQL构建了它们in@bassxzero,它们现在被设置为时间,但问题仍然是,我如何做一个语句来确定这个公差?类似这样的
select*从某个表中,其中now()介于(TIME_列-INTERVAL 10分钟)和(TIME_列+INTERVAL 10分钟)之间
我也更喜欢MySQL版本,所以它应该类似于和(现在()-STR_TO_DATE(CONCAT(agendamentos.data_agendada',horarios.horario),“%Y-%m-%d%H:%I:%s')=10)?而不是10600。结果以秒为单位,因此您必须以秒为单位转换10分钟(乘以60)。=其他的。你不需要从一个减去另一个。ABS()将为您提供一个正值,您可以将其与正公差进行比较。它不在乎它是在计划的时间之前还是之后。@WaldsonPatricio此查询没有给出任何结果,我尝试将一个时间安排在16:00:00,而使用。