我正在尝试设置DB条目的到期日期。我已将字段设置为datetime
并通过MySQL手动输入了一些值
我从表中获取值并将其转换为strtotime()
。然后我使用strtotime("now")
得到当前时间;或time()
;他们似乎回归了同样的价值。
以下是代码:
$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小时。
答案 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
函数。
您的system
和php
时区很可能会有所不同。
您可以使用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);
我只是将数据库的当前时间戳用作“现在” 不确定这是否是最好的解决方案,但它有效