我正在尝试检查数据库中某行和某列的时间是否比现在更长,然后才能回应成功,但这是对明天的日期的成功回应!
代码
// 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
任何建议都将不胜感激
答案 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)
我建议您使用DateTime
和DateInterval
类。
如果差异恰好是一天,你可以比较它们:
$expiry = new DateTime($expiry_possibles[6]);
if ($expiry->diff($time_now)->format('%d') == "1") ...
反之亦然。还有date_diff()