Php Can';t计算两个时间戳之间的正确差值
我正在创建一个WordPress插件,我希望它能在数据库中存储一个UNIX时间戳,然后在一个小时或更长时间后更新DB条目 以下是我的插件的代码片段: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 );
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
WordPress函数返回1367330177(如get\u option()
中var\u dump()
变量所示)$db\u option\u time
似乎
get\u option()
函数正在从数据库中提取正确的时间戳,然后对其执行某些操作?您不应该为此类功能使用开关。如果my_database\u键
不在数据库中,它将返回false
,否则它将返回一个不等于true
的数字。使用andif
语句可以大大简化,因为您的逻辑主要是关于何时为数据库设置新值
在下面的例子中
- 设置选项键
- 将
设置为当前时间$now
- 检查
值是否为绝对$db\u option\u time
,或者它与false
之间的时间是否大于或等于3600秒$now
- 如果是,请将选项键
设置为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 );
}