设想:一条记录已输入数据库。
我试图找出以下方程:
- 如何获取自添加记录以来的小时数。
- 如何获取自记录以来到午夜还剩多少小时
加入。
鉴于这些时间:
- 日期/时间: 2012-08-22 20:11:20
- 时间戳:1345684280
- 今晚午夜:2012-08-23 00:00:00
- 午夜时间戳:1345698000
我觉得我走在正确的轨道上。只需要一些适当的数学来进行计算?我数学很糟糕。任何帮助或指导将不胜感激。我不是在找人来帮我完成这件事。只是寻求有关我做错了什么或如何做得更好的建议。也许解释一下实现我的目标所需的数学公式。
这是我到目前为止所拥有的:
class tools{
public function __construct(){
}
public function check_time($time, $request){
$time = strtotime($time);
if($request == 'since'){
$theTime = time() - $time;
$prefix = 'Since:';
} elseif($request == 'until'){
$midnight = mktime(0, 0, 0, date('n'), date('j'), date('Y'));
$theTime = $midnight - $time;
$prefix = 'Until:';
}
$tokens = array (
31536000 => 'year',
2592000 => 'month',
604800 => 'week',
86400 => 'day',
3600 => 'hour',
60 => 'minute',
1 => 'second'
);
foreach($tokens as $unit => $text){
if($theTime < $unit) continue;
$duration = floor($theTime / $unit);
return $prefix.' '.$duration.' '.$text.(($duration>1)?'s':'');
}
}
}// EoF tools class
$tools = new tools();
print_r($tools->check_time('2012-08-22 20:11:20', 'since'));
print_r($tools->check_time('2012-08-22 20:11:20', 'until'));
这里的解决方案非常简单。有一个小错误导致了您的所有问题。
在您的代码中,您可以用它来计算午夜。
$midnight = mktime(0, 0, 0, date('n'), date('j'), date('Y'));
这是不正确的,因为它使用的是今天的午夜(今天是 00:00,无论多少小时前。您需要明天的午夜,因为它被认为是 24 小时时间的 00:00,并且是明天。正确的方法就像这样:
$midnight = strtotime("tomorrow 00:00:00");
请记住,strtotime() 的所有内容均基于 GMT,因此请确保在文件/应用程序中设置默认时区。
我希望我的答案很清楚,并解释了为什么您发布的代码是错误的以及如何修复它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)