某些数据库条目的到期日期

时间:2012-11-22 10:21:00

标签: php datetime

我正在尝试设置DB条目的到期日期。我已将字段设置为datetime并通过MySQL手动输入了一些值

我从表中获取值并将其转换为strtotime()。然后我使用strtotime("now")得到当前时间;或time();他们似乎回归了同样的价值。

然后我接下来的日期(数据库中的那个)和if语句检查它是否小于当前时间,如果是,我将其设置为已过期。如果它仍然大于当前时间我还剩下多少时间..

以下是代码:

$time_left = "";
$value['ex_date'] = '2012-11-22 18:17:33';// this is whats in the DB now.
$future_time = strtotime($value['ex_date']);
$now_time = strtotime('now');

if($deal_end < $now_time){
    $time_left = 'Expired';
}else{
    $seconds = $future_time - $now_time;
    $days = floor($seconds / 86400);
    $seconds %= 86400;
    $hours = floor($seconds / 3600);
    $seconds %= 3600;
    $minutes = floor($seconds / 60);
    $seconds %= 60;

    if($days >= 1) {$time_left .= "D:$day ";}
    if($hours >= 1) {$time_left .= "H:$hours ";}
    if($minutes >= 1) {$time_left .= "M:$minutes ";}
    if($seconds >= 1) {$time_left .= "S:$seconds ";}

出于某种原因,上述方法效果不佳。它就像有一些时间差距。

我的问题是:有没有办法检查服务器时间与数据库时间?

因为strtotime('now');时间似乎与目前的时间差不同,因为出于某种原因需要2/3小时。

3 个答案:

答案 0 :(得分:0)

我可以建议另外两种方法:
一个。从尚未过期的数据库行中进行选择,然后将逻辑添加到查询本身
湾运行cron / mysql计划每分钟清除已过期的数据库条目

SELECT * from TABLE where X = Y and NOW() < expiredField


此外,PHP还有一个内置类,仅适用于您尝试执行日期的操作 它被称为DateTime

$dt = new DateTime('2012-11-22 18:17:33');
$dtNow = new DateTime();

$interval = $dtNow->diff($dt); // php.net/DateInterval
if($interval->invert) 
    echo 'expired';
else 
    echo $interval->format('%m month, %d days, %h hours, %s seconds');

原始问题

检查服务器时间是 echo time();
检查数据库时间是 SELECT NOW();

答案 1 :(得分:0)

您可以在命令行中使用以下命令找到服务器(linux)时区:

$ date +%Z

或者在php中关注:

$ echo system('date +%Z');

在php中,您可以使用date_default_timezone_get函数。

您的systemphp时区很可能会有所不同。

您可以使用php function更改date_default_timezone_set时区。

答案 2 :(得分:0)

如果有人对我如何解决它感到好奇:

$result = mysql_query("select CURRENT_TIMESTAMP;");
$row = mysql_fetch_array( $result );
$DB_now = $row['CURRENT_TIMESTAMP'];



$deal_end = strtotime($value['ex_date']);
$now_time = strtotime($DB_now);

我只是将数据库的当前时间戳用作“现在” 不确定这是否是最好的解决方案,但它有效