场景:已将记录输入数据库。
我想弄清楚以下等式:
考虑到这些时间:
我觉得我走在正确的轨道上。只需要一些适当的数学来进行计算?我数学很糟糕。任何帮助或指导将不胜感激。我不是在寻找有人为我完成这件事。只是寻找关于我做错了什么的建议,或者我如何做得更好。也许解释实现我的目标所必需的数学公式。
以下是我目前的情况:
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'));
答案 0 :(得分:10)
这里的解决方案非常简单。有一个小错误导致了所有问题。
在你的代码中,你可以计算午夜。
$midnight = mktime(0, 0, 0, date('n'), date('j'), date('Y'));
这是不正确的,因为它正在使用TODAY的午夜(今天是00:00,不过几个小时前,从现在开始。你想要午夜明天,因为它在24小时时被认为是00:00,明天是正确的做法就是这样:
$midnight = strtotime("tomorrow 00:00:00");
请记住,strtotime()将所有内容都基于GMT,因此请确保在文件/应用程序中设置默认时区。
我希望我的回答很清楚,并解释为什么您发布的代码错误以及如何修复它。
答案 1 :(得分:3)
也许是这样的?我不得不承认不完全理解你想要的输出是什么:
$d1 = new DateTime('2012-08-22 20:11:20');
$d2 = new DateTime('2012-08-23 00:00:00');
$interval = $d1->diff($d2);
echo $interval->format('%h hours %i minutes and %s seconds');
答案 2 :(得分:1)
又好又简单:
$timeLeft = 86400 - (time() - strtotime("today"));
echo date("H:i:s", $timeLeft);
86400
是一天的初始时间。
time()
是当前时间。
strtotime("today")
是这一天的开始时间。
date("H:i:s", $timeLeft)
用于以小时,分钟和秒为单位的格式。
更短的方法:
date("H:i:s", strtotime("tomorrow") - time())
答案 3 :(得分:0)
午夜不超过第二天没有指定时间最好的方法必须是:
<?php
$datetime1 = new DateTime(date('Y-m-d H:i:s'));//current datetime object
$datetime2 = new DateTime(date('Y-m-').date(d));//next day at midnight
$interval = $datetime1->diff($datetime2);//diference
echo $interval->format('H');printing only hours (same as date format)
?>
如果您想了解更多信息:php date_diff
答案 4 :(得分:-1)
你可以试试这个:
$now = strtotime('2012-08-22 20:11:20');
$midnight = strtotime('2012-08-23 00:00:00');
$difference = $midnight - $now;
echo date("H:i:s", $difference);