【问题标题】:Can't calculate correct difference between two timestamps无法计算两个时间戳之间的正确差异
【发布时间】:2013-04-30 14:23:41
【问题描述】:

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

这是我插件中的代码 sn-p:

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_option_time$now 变量上运行 var_dump(),它会显示两个不同的时间戳,但 $db_option_time 时间戳与数据库中保存的时间戳不同!

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

这是一个例子:

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

似乎get_option() 函数正在从数据库中提取正确的时间戳,然后对其进行处理?

【问题讨论】:

  • 只做一个调试——打印$now,打印$db_option_time,打印$time_difference...
  • 我刚刚更新了我的原始帖子。 $now 是正确的,但问题似乎是 get_option() 函数更改了从数据库中读取的值,因为它被保存到我的 $db_option_time 变量中。
  • get_option() of db_time 应该进行更新和获取以获取最新的 DB_TIME

标签: php wordpress variables time comparison


【解决方案1】:

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

在下面的例子中...

  • 设置选项键
  • $now设置为当前时间
  • 检查$db_option_time的值是否绝对是false它与$now之间的时间是否大于或等于3600秒。
  • 如果是,将选项键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 );
}

【讨论】:

    猜你喜欢
    • 2020-05-13
    • 1970-01-01
    • 2014-05-04
    • 1970-01-01
    • 1970-01-01
    • 2017-03-26
    相关资源
    最近更新 更多