我想比较两个日期,第一个是我当前的日期,第二个是数据库的日期。
当我看到它们看起来都相同时,但是PHP给了我另一个结果。我尝试使用像strcmp
这样的函数进行比较。我简化了我的代码,以便您更容易理解。
<?php
$users_day = "20".date("y-m-d");
$looper = 0 ;
$all_users_selection = mysql_query("SELECT * FROM user");
while($user_rows = mysql_fetch_array($all_users_selection) )
{
if($user_rows['user_lastseen'] != NULL)
{
//Getting user lastseen day and hour
$db_user_date[$looper] = substr(($user_rows['user_lastseen']) ,0 , 10);
$db_user_curr[$looper] = $user_rows['username'];
//Comparing day then hour
if (strcmp($users_day,$db_user_date[$looper]) != 0)
{
//Set offline
$current_user_update = mysql_query("UPDATE user SET user_status = 'offline' WHERE username = '$db_user_curr[$looper]'");
}
$looper++;
}
?>
当我尝试测试变量时,例如echo $users_day;
,它会给我2016-12-24
(我当前的日期)。
另外,当我从数据库测试日期时,它给了我一个相同类型的日期,例如我添加的:
echo $db_user_date[$looper];
在我的while loop
中,在某些情况下,日期相同2016-12-24
当我测试echo strcmp($users_day,$db_user_date[$looper]);
时
它给了我-10这意味着他们是100%不同但他们不是!
有什么想法吗?
答案 0 :(得分:4)
将日期转换为时间,这是一个数值,然后比较它们。
$current = strtotime($users_day)
$db_date = strtotime($db_user_date[$looper])
if($current > $db_date)
{
...
}
答案 1 :(得分:0)
比较日期时,您应该贬低它们的值,而不是它们的字符串表示。
字符串'01 Jan 2017'
不等于字符串'2017-01-01'
,但日期实际上是相等的,对吗?
因此,您需要将两个日期字符串转换为一种格式,以便您可以安全地比较它们。 Hicaro的答案很容易解决问题。
另外,请考虑使用单个查询替换此整个代码块:
<?php
mysql_query("UPDATE user SET user_status = 'offline' WHERE DATE(user_lastseen) <> CURDATE()");
因此,您要为user_lastseen
不等于今天的所有用户设置“离线”状态(我认为这是您要实现的目标吗?)。