通过php

时间:2016-12-23 22:40:59

标签: php mysql date

我想比较两个日期,第一个是我当前的日期,第二个是数据库的日期。

当我看到它们看起来都相同时,但是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%不同但他们不是!

有什么想法吗?

2 个答案:

答案 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不等于今天的所有用户设置“离线”状态(我认为这是您要实现的目标吗?)。