Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
比较MySQL中的日期和PHP中的日期_Php_Mysql - Fatal编程技术网

比较MySQL中的日期和PHP中的日期

比较MySQL中的日期和PHP中的日期,php,mysql,Php,Mysql,我有一个web应用程序,用户可以登录到它。 每次特定用户登录时,我都将登录日期时间存储在MySQL数据库中: (yyyy-mm-dd hh-mm-ss) 数据库中的每条记录都有一个用户标识符和上次登录日期时间。 但是,我想确保用户每天只能登录一次。 我正在考虑将PHP中的time函数与数据库中的datetime进行比较,看看用户今天是否已经登录。 如果用户今天登录,我会把他踢出去 如何将数据库中的记录与PHP中的时间函数进行比较,以查看用户是否已经登录 谢谢 如果要在PHP中执行此操作,可以

我有一个web应用程序,用户可以登录到它。 每次特定用户登录时,我都将登录日期时间存储在MySQL数据库中:

(yyyy-mm-dd hh-mm-ss) 
数据库中的每条记录都有一个用户标识符和上次登录日期时间。
但是,我想确保用户每天只能登录一次。
我正在考虑将PHP中的time函数与数据库中的datetime进行比较,看看用户今天是否已经登录。
如果用户今天登录,我会把他踢出去

如何将数据库中的记录与PHP中的时间函数进行比较,以查看用户是否已经登录


谢谢

如果要在PHP中执行此操作,可以使用strotime()将其转换为时间戳(自1970年1月1日起的秒数),然后根据需要进行比较:

$time = strtotime($row['time']);

如果要在PHP中执行此操作,可以使用strotime()将其转换为时间戳(自1970年1月1日起的秒数),然后根据需要进行比较:

$time = strtotime($row['time']);

除了完全在数据库端执行之外,因为这是可能的(而且可能更容易做到,而不必在SQL和PHP之间进行混洗),在使用来自两个不同平台的格式化时间戳时,最好的做法是将两个时间戳字符串转换为统一的时间戳


你可以用它来做这件事。我经常遇到这样的情况,当我需要比较SQL server时间戳和服务器时间戳时,所以当我需要在PHP端使用好的ol strotime()时,我只是使用它。

除了完全在数据库端执行之外,因为这是可能的(并且可能更容易执行,而不需要在SQL和PHP之间进行混合),在使用来自两个不同平台的格式化时间戳时,最好将两个时间戳字符串转换为统一的时间戳


你可以用它来做这件事。我经常遇到这样的情况,当我需要比较SQL server时间戳和服务器时间戳时,所以当我需要将它放在PHP端时,我只使用good ol strotime()

... (AND DAY(last_login_datetime) != DAY(NOW()) OR MONTH(last_login_datetime) != MONTH(NOW()) OR YEAR(last_login_datetime) != YEAR(NOW()))

如果日期、月份或年份与今天的日期、月份和年份不匹配,则选择将返回用户(假设其他凭据/条件有效)。如果没有返回结果,则表示用户的凭据不正确或用户今天已登录-根据您的要求,无论哪种方式都不允许他们登录。

您可以在
选择的条件中添加类似的内容,以在用户登录时验证其凭据

... (AND DAY(last_login_datetime) != DAY(NOW()) OR MONTH(last_login_datetime) != MONTH(NOW()) OR YEAR(last_login_datetime) != YEAR(NOW()))

如果日期、月份或年份与今天的日期、月份和年份不匹配,则选择将返回用户(假设其他凭据/条件有效)。如果没有返回结果,则表示用户的凭据不正确或用户今天已登录-根据您的要求,无论哪种方式都不应允许他们登录。

我知道这不是您所要求的,但这完全可以通过SQL完成

SELECT * FROM table WHERE DATEDIFF(created_on, NOW()) <= -1

SELECT*FROM table WHERE DATEDIFF(created_on,NOW())我知道这并不是您所要求的,但这完全可以用SQL来完成

SELECT * FROM table WHERE DATEDIFF(created_on, NOW()) <= -1
SELECT*FROM table WHERE DATEDIFF(在上创建,现在())PHP代码段:

$today = date('Y-m-d');
$dbDate = new DateTime('2011-07-11 12:00:00'); // DB Date as parameter

if($today == date_format($dbDate,'Y-m-d'))
{
    ; // Magic
}
PHP代码段:

$today = date('Y-m-d');
$dbDate = new DateTime('2011-07-11 12:00:00'); // DB Date as parameter

if($today == date_format($dbDate,'Y-m-d'))
{
    ; // Magic
}

如果出于任何原因需要在PHP中比较日期,最好的方法是使用、和类

这样做的原因是很容易计算差异,从不同的输入日期和最重要的时区构造date对象,这样在处理夏令时就不会出错

如何:

$date = '2011-07-11 13:37:37';
$timezone = 'Europe/London';

$date = DateTime::createFromFormat('yyyy-mm-dd hh-mm-ss', $date, new DateTimeZone($timezone );
$now = new DateTime(time(), $timezone);

$diff = $date->diff($now); // You got the difference here. If the difference is less than 24h then attempt in the same day occurred.

if($diff->h < 24)
{
    // failure
}
$date='2011-07-11 13:37:37';
$时区='欧洲/伦敦';
$date=DateTime::createFromFormat('yyyy-mm-dd hh-mm ss',$date,新日期时区($timezone);
$now=新的日期时间(time(),$timezone);
$diff=$date->diff($now);//您在这里得到了差异。如果差异小于24小时,则在同一天进行尝试。
如果($diff->h<24)
{
//失败
}

如果出于任何原因需要在PHP中比较日期,最好的方法是使用、和类

这样做的原因是很容易计算差异,从不同的输入日期和最重要的时区构造date对象,这样在处理夏令时就不会出错

如何:

$date = '2011-07-11 13:37:37';
$timezone = 'Europe/London';

$date = DateTime::createFromFormat('yyyy-mm-dd hh-mm-ss', $date, new DateTimeZone($timezone );
$now = new DateTime(time(), $timezone);

$diff = $date->diff($now); // You got the difference here. If the difference is less than 24h then attempt in the same day occurred.

if($diff->h < 24)
{
    // failure
}
$date='2011-07-11 13:37:37';
$时区='欧洲/伦敦';
$date=DateTime::createFromFormat('yyyy-mm-dd hh-mm ss',$date,新日期时区($timezone);
$now=新的日期时间(time(),$timezone);
$diff=$date->diff($now);//您在这里得到了差异。如果差异小于24小时,则在同一天进行尝试。
如果($diff->h<24)
{
//失败
}

为什么不完全在数据库中执行此操作?它具有您可能需要的所有日期操作和比较功能。从添加日期(上次登录日期时间,间隔1天)的用户中选择*,选择登录日期=CURDATE()的操作,从用户id=xxx的用户中踢出。“每天只能登录一次“-但这意味着什么?每24小时一次?每日历日一次?如果是后者,是哪一个日历日-服务器上的日历日?UTC日历日?客户端上的日历日?为什么不完全在DB中执行此操作?它具有您可能需要的所有日期操纵和比较功能。从用户添加日期的位置选择*”(上次登录\u日期时间,间隔1天)选择logon\u date=CURDATE()的操作,以从用户中踢出,其中user\u id=xxx
“一天只能登录一次”-但这意味着什么?每24小时一次?每日历日一次?如果是后者,是哪个日历日-服务器上的日历日?UTC日历日?客户端上的日历日?