[PHP]:带有日期差异的逻辑
我正在寻找一个优雅的解决方案,根据从现在到数据库中的ISO格式日期之间的时间长度来更改时间格式 我希望输出像这样[PHP]:带有日期差异的逻辑,php,date,logic,Php,Date,Logic,我正在寻找一个优雅的解决方案,根据从现在到数据库中的ISO格式日期之间的时间长度来更改时间格式 我希望输出像这样 //less than an hour 'X minutes have gone by' //less than 24 hours 'X hours have gone by' //greater than 24 hours ISO date 这是我到目前为止所拥有的 $now = date("o-m-d H:i:s") //now = something like '2009-
//less than an hour
'X minutes have gone by'
//less than 24 hours
'X hours have gone by'
//greater than 24 hours
ISO date
这是我到目前为止所拥有的
$now = date("o-m-d H:i:s") //now = something like '2009-12-28 16:39:00'
$dateExample = '2009-12 16:37:00'
$timeSpan = round(strtotime($now) - strtotime($dateExample));
if(($timeSpan/60)<=60)
{
echo $timeSpan." minutes";
}
if(($timeSpan/(60*60))<=24)
{
echo ($timeSpan/(60*60))." Hours";
}
else
{
echo $dateExample;
}
$now=date(“o-m-dh:i:s”)//now=类似于“2009-12-28 16:39:00”
$dateExample='2009-12 16:37:00'
$timeSpan=round(strotime($now)-strotime($dateExample));
如果($timeSpan/60)有一点改进:
$dateExample = '2009-12 16:37:00'
function timepass($dt){
$dt = (is_int($dt) ? $dt : strtotime($dt));
$timeSpan = round(time() - $dt);
if(($timeSpan/60)<=60){
return $timeSpan." minutes";
}elseif(($timeSpan/(60*60))<=24){
return ($timeSpan/(60*60))." hours";
}else{
return date('o-m-d H:i:s',$dt);
}
}
echo timepass($dateExample);
$dateExample='2009-12 16:37:00'
函数时间传递($dt){
$dt=(is_int($dt)?$dt:strotime($dt));
$timeSpan=round(time()-$dt);
如果($timeSpan/60)有一点改进:
$dateExample = '2009-12 16:37:00'
function timepass($dt){
$dt = (is_int($dt) ? $dt : strtotime($dt));
$timeSpan = round(time() - $dt);
if(($timeSpan/60)<=60){
return $timeSpan." minutes";
}elseif(($timeSpan/(60*60))<=24){
return ($timeSpan/(60*60))." hours";
}else{
return date('o-m-d H:i:s',$dt);
}
}
echo timepass($dateExample);
$dateExample='2009-12 16:37:00'
函数时间传递($dt){
$dt=(is_int($dt)?$dt:strotime($dt));
$timeSpan=round(time()-$dt);
if($timeSpan/60)您确实无法摆脱if语句,但是如果您的目的是压缩代码,那么这也会做同样的事情:
function timePassed($date) {
$diff = time() - strtotime($date);
return $diff > 86400 ? $date : ($diff > 3600 ? ($diff / 3600).' hours' : ($diff / 60).' minutes');
}
echo timePassed('2009-12-29 16:30:00');
但是,不确定这是否有利于可读性。您确实无法摆脱if语句,但如果您的目的是压缩代码,那么这也会起到同样的作用:
function timePassed($date) {
$diff = time() - strtotime($date);
return $diff > 86400 ? $date : ($diff > 3600 ? ($diff / 3600).' hours' : ($diff / 60).' minutes');
}
echo timePassed('2009-12-29 16:30:00');
不过,不确定这是否有利于可读性。如果您关心布局,可以简单地将if换成开关
例如:
$now = date("o-m-d H:i:s") //now = something like '2009-12-28 16:39:00'
$dateExample = '2009-12 16:37:00'
$timeSpan = round(strtotime($now) - strtotime($dateExample));
switch(true) {
case (($timeSpan/60)<=60): { echo $timeSpan." minutes"; break; }
case (($timeSpan/(60*60))<=24): { echo ($timeSpan/(60*60))." Hours"; break; }
default: { echo $dateExample; }
}
$now=date(“o-m-dh:i:s”)//now=类似于“2009-12-28 16:39:00”
$dateExample='2009-12 16:37:00'
$timeSpan=round(strotime($now)-strotime($dateExample));
开关(真){
case(($timeSpan/60)如果您关心布局,您可以简单地将if换成交换机
例如:
$now = date("o-m-d H:i:s") //now = something like '2009-12-28 16:39:00'
$dateExample = '2009-12 16:37:00'
$timeSpan = round(strtotime($now) - strtotime($dateExample));
switch(true) {
case (($timeSpan/60)<=60): { echo $timeSpan." minutes"; break; }
case (($timeSpan/(60*60))<=24): { echo ($timeSpan/(60*60))." Hours"; break; }
default: { echo $dateExample; }
}
$now=date(“o-m-dh:i:s”)//now=类似于“2009-12-28 16:39:00”
$dateExample='2009-12 16:37:00'
$timeSpan=round(strotime($now)-strotime($dateExample));
开关(真){
案例(($TimeSp/ 60)< P>)如果你担心代码对你的库日期转换函数的读者是清晰的,那么你可能想考虑这种方式(重写PHP开发者开发的函数):
函数时间传递($dt){
$timeSpan=round(time()-(is_int($dt)?$dt:strottime($dt));
$hours=intval($timeSpan/SECONDS\u/u小时);//在某个地方定义它
$minutes=intval($timeSpan/SECONDS\u PER\u MINUTE);//在某处定义它
如果($hours==0){
返回$minutes。'minutes';
}
否则,如果($24小时以内){
返回$hours。'hours';
}
否则{
返回“”;//此处是ISO日期逻辑
}
}
<> p>我不知道如何去清除if,但是我个人觉得这个代码在选择格式返回的逻辑和每种情况下的返回值上都非常清楚。 如果你担心代码对你的库日期转换函数的读者来说是清晰的,那么你可能想考虑这个方法。(重写HPDeveloper发布的函数):
函数时间传递($dt){
$timeSpan=round(time()-(is_int($dt)?$dt:strottime($dt));
$hours=intval($timeSpan/SECONDS\u/u小时);//在某个地方定义它
$minutes=intval($timeSpan/SECONDS\u PER\u MINUTE);//在某处定义它
如果($hours==0){
返回$minutes。'minutes';
}
否则,如果($24小时以内){
返回$hours。'hours';
}
否则{
返回“”;//此处是ISO日期逻辑
}
}
我不知道如何摆脱if,但我个人觉得这段代码非常清楚选择返回格式的逻辑以及每种情况下的返回值。以下是我最终的操作方式
$now = date("o-m-d H:i:s");
$timeSpan = round(strtotime($now) - strtotime($lastCheckIn));
$minuteCheck = round($timeSpan/60);
$hourCheck = round($timeSpan/(60*60));
if($minuteCheck<=60)
{
echo $minuteCheck." minutes";
}
else if($hourCheck<=24)
{
echo $hourCheck." hours";
}
else
{
echo $lastCheckIn;
}
$now=日期(“o-m-d H:i:s”);
$timeSpan=round(strotime($now)-strotime($lastCheckIn));
$minuteCheck=圆形($timeSpan/60);
$hourCheck=round($timeSpan/(60*60));
如果($minuteCheck,下面是我最后如何做的
$now = date("o-m-d H:i:s");
$timeSpan = round(strtotime($now) - strtotime($lastCheckIn));
$minuteCheck = round($timeSpan/60);
$hourCheck = round($timeSpan/(60*60));
if($minuteCheck<=60)
{
echo $minuteCheck." minutes";
}
else if($hourCheck<=24)
{
echo $hourCheck." hours";
}
else
{
echo $lastCheckIn;
}
$now=日期(“o-m-d H:i:s”);
$timeSpan=round(strotime($now)-strotime($lastCheckIn));
$minuteCheck=圆形($timeSpan/60);
$hourCheck=round($timeSpan/(60*60));
如果($minutechEckt我也是这么做的!把它变成一个函数怎么样?用时间戳调用它。注意,如果你没有使用elseif
的时间少于一个小时,它会回显几分钟,也回显几小时。我也是这么做的!把它变成函数怎么样?用时间戳调用它。注意,它会如果您没有使用elseif
后不到一个小时,那么cho minutes也可以是hours。请记住,代码是供人阅读的。这样放置可能会使代码容易出错。请记住,代码是供人阅读的。这样放置可能会使代码容易出错。