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,而使用。