检查数据是否早于当前时间php

时间:2013-09-08 12:37:08

标签: php arrays date time strtotime

我正在尝试检查数据库中某行和某列的时间是否比现在更长,然后才能回应成功,但这是对明天的日期的成功回应!

代码

// Set variable for the time
$timenow = date('l jS \of F Y h:i:s A');

    // Start Expired password check and drop function
    function cronexec_expired ($timenow) {

        include('../../config.php');

        // Open up a new MySQLi connection to the MySQL database
        mysql_connect($dbHost, $dbUsername, $dbPassword);
        mysql_select_db($dbTable);

        // Query to check the status of the code input
        $expiry_check = "SELECT * FROM code_log WHERE status='Unused'";

        // Run the query
        $expiry_checkexec = mysql_query($expiry_check);

        while($expiry_possibles = mysql_fetch_array($expiry_checkexec)) {

            echo $expiry_possibles[6] . '<br /><br />';
            echo $timenow . '<br /><br />';

            if (date('l jS \of F Y h:i:s A', strtotime($expiry_possibles[6]) < $timenow)) {

                echo "Success";

            }


        }


    }

$ expiry_possibles [6] value

Monday 9th of September 2013 12:46:20 PM

现在时间

Sunday 8th of September 2013 01:35:22 PM

任何建议都将不胜感激

2 个答案:

答案 0 :(得分:0)

我不明白你为什么要使用全长日期,没有必要。相反如何使用unix时间戳?见http://php.net/manual/en/function.time.php。比较可能比较完整的日期字符串很难?

我总是发现使用time()更容易,因为它基本上比较了两个数字。

$current_time = time();
$expiry_possibles_timestamp = strtotime($expiry_possibles[6]);

if ($current_time > $expiry_possibles_timestamp)
{
    // Older than current time
}

我在下面修改了你的代码,试试看。请记住,您将需要PHP 5.3及更高版本。

function cronexec_expired($timenow)
{

    include('../../config.php');

    // Open up a new MySQLi connection to the MySQL database
    mysql_connect($dbHost, $dbUsername, $dbPassword);
    mysql_select_db($dbTable);

    // Query to check the status of the code input
    $expiry_check = "SELECT * FROM code_log WHERE status='Unused'";

    // Run the query
    $expiry_checkexec = mysql_query($expiry_check);

    while ($expiry_possibles = mysql_fetch_array($expiry_checkexec))
    {
        echo $expiry_possibles[6] . '<br /><br />';
        echo $timenow . '<br /><br />';

        $datetime = DateTime::createFromFormat('l jS \of F Y h:i:s', $expiry_possibles[6]);

        if (!$datetime) continue; // Skip this execution as we cannot parse the date, so we will not trust it.

        if (time() > $datetime->getTimestamp())
        {
            echo "Database row is in the past";
        } else
        {
            echo "Database row is in the future";
        }

    }

}

这应该有用,虽然我还没有测试过。日期如何存储在数据库中?它应该是MySQL格式(YYYY-MM-DD HH:MM:SS)或者是unix时间戳格式。

答案 1 :(得分:0)

我建议您使用DateTimeDateInterval类。

如果差异恰好是一天,你可以比较它们:

$expiry = new DateTime($expiry_possibles[6]);
if ($expiry->diff($time_now)->format('%d') == "1") ...

反之亦然。还有date_diff()

形式的程序界面

更多信息: http://www.php.net/manual/en/datetime.diff.php