无法计算两个时间戳之间的正确差异

时间:2013-04-30 14:23:41

标签: php wordpress variables time comparison

我正在创建一个WordPress插件,我想要它做的是在数据库中存储UNIX时间戳,然后在一小时或更长时间后更新数据库条目。

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

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;

}

如果我在var_dump()$db_option_time变量上运行$now,它会向我显示两个不同的时间戳,但$db_option_time时间戳与数据库中保存的时间戳不同! / p>

在根据$now变量检查数据库中的时间戳时,差异大于3600秒(使用我的可靠计算器检查时)。我认为get_option WordPress功能出了问题?

以下是一个例子:

  • 数据库条目(在phpMyAdmin中检查) 1367324833
  • get_option() WordPress函数返回 1367330177 (如var_dump()变量上$db_option_time所示)

似乎get_option()函数正在从数据库中提取正确的时间戳然后对它做些什么?

1 个答案:

答案 0 :(得分:0)

您不应该使用此类功能的开关。如果my_database_key不在数据库中,它将返回false,否则它将返回一个不等于true的数字。使用和if语句大大简化了,因为您的逻辑很大程度上是在为数据库设置新值时。

在下面的例子中......

  • 设置选项键
  • $now设置为当前时间
  • 检查$db_option_time值是绝对false还是,如果它与$now之间的距离大于或等于3600秒。 / LI>
  • 如果是,请将选项键my_database_key设置为$now

代码:

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 );
}
相关问题