Mic*_*und 4 php math datetime timestamp equation
场景:已将记录输入数据库.
我想弄清楚以下等式:
鉴于这些时间:
我觉得我走在正确的轨道上.只需要一些适当的数学来进行计算?我数学很糟糕.任何帮助或指导将不胜感激.我不是在寻找有人为我完成这件事.只是寻找关于我做错的建议,或者我如何做得更好.也许解释实现我的目标所必需的数学公式.
这是我到目前为止:
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'));
Run Code Online (Sandbox Code Playgroud)
小智 10
这里的解决方案非常简单.有一个小错误导致您的所有问题.
在您的代码中,您可以计算午夜.
$midnight = mktime(0, 0, 0, date('n'), date('j'), date('Y'));
Run Code Online (Sandbox Code Playgroud)
这是不正确的,因为它正在使用TODAY的午夜(今天是00:00,不过很多小时前,从现在开始.你想要午夜明天,因为它在24小时时被认为是00:00,明天是正确的.这样做是这样的:
$midnight = strtotime("tomorrow 00:00:00");
Run Code Online (Sandbox Code Playgroud)
请记住,strtotime()将所有内容都基于GMT,因此请确保在文件/应用程序中设置默认时区.
我希望我的回答很清楚,并解释为什么你发布的代码是错误的以及如何解决它.