Php Can';t计算两个时间戳之间的正确差值

Php Can';t计算两个时间戳之间的正确差值,php,wordpress,variables,time,comparison,Php,Wordpress,Variables,Time,Comparison,我正在创建一个WordPress插件,我希望它能在数据库中存储一个UNIX时间戳,然后在一个小时或更长时间后更新DB条目 以下是我的插件的代码片段: const DB_TIME = 'my_database_key'; $db_option_time = get_option ( DB_TIME ); $now = time(); switch ( $db_option_time ) { case false: update_option ( DB_TIME, $now );

我正在创建一个WordPress插件,我希望它能在数据库中存储一个UNIX时间戳,然后在一个小时或更长时间后更新DB条目

以下是我的插件的代码片段:

const DB_TIME = 'my_database_key';

$db_option_time = get_option ( DB_TIME );
$now = time();

switch ( $db_option_time ) {

case false:
    update_option ( DB_TIME, $now );

    break;

case true:
    $time_difference = $now - $db_option_time;

    if ( $time_difference >= 3600 ) {
        update_option ( DB_TIME, $now );
    }

    break;

default:

    break;

}
如果我在
$db\u选项\u time
$now
变量上运行
var\u dump()
,它会显示两个不同的时间戳,除了
$db\u选项\u time
时间戳与保存在数据库中的时间戳不同

根据
$now
变量检查数据库中的时间戳时,差异大于3600秒(使用可靠的计算器检查时)。我认为
get\u选项
WordPress函数有问题吗

下面是一个例子:

  • 数据库条目(在phpMyAdmin中检查)为1367324833
  • get\u option()
    WordPress函数返回1367330177(如
    var\u dump()
    $db\u option\u time
    变量所示)

似乎
get\u option()
函数正在从数据库中提取正确的时间戳,然后对其执行某些操作?

您不应该为此类功能使用开关。如果
my_database\u键
不在数据库中,它将返回
false
,否则它将返回一个不等于
true
的数字。使用and
if
语句可以大大简化,因为您的逻辑主要是关于何时为数据库设置新值

在下面的例子中

  • 设置选项键
  • $now
    设置为当前时间
  • 检查
    $db\u option\u time
    值是否为绝对
    false
    ,或者它与
    $now
    之间的时间是否大于或等于3600秒
  • 如果是,请将选项键
    my_database\u key
    设置为
    $now
代码:


只需进行调试-打印
$now
,打印
$db\u option\u time
,打印
$time\u difference
…我刚刚更新了我的原始帖子
$now
是正确的,但问题似乎是
get\u option()
函数在将DB中读取的值保存到my
$DB\u option\u time
变量时更改了该值。DB\u time的
get\u option()
应该进行更新和获取,以获取最新的DB\u时间
const DB_TIME = 'my_database_key';
$now = time();
$db_option_time = get_option ( DB_TIME );
if ( false === $db_option_time || $now - $db_option_time >= 3600 ){
    update_option ( DB_TIME, $now );
}