0

我正在尝试检查数据库中一行和某一列的时间是否比今天更早,然后回显成功,但它正在回显明天的日期成功!

代码

// 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] 值

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

是时候了

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

任何意见,将不胜感激

4

2 回答 2

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 时间戳格式。

于 2013-09-08T12:42:06.743 回答
0

我建议使用DateTimeandDateInterval类。

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

$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

于 2013-09-08T12:44:37.473 回答