我有这样的功能:
function time_elapsed_string($ptime)
{
$date_time = strtotime("1348-10-10 04:30:01") + $ptime;
$year = date("Y",$date_time);
$month = date("m",$date_time);
$day = date("d",$date_time);
$time = date("H:i:s",$date_time);
$etime = time() - $ptime + 1;
$a = array( 31536000 => 'year',
2592000 => 'month',
86400 => 'day',
3600 => 'hour',
60 => 'minute',
1 => 'second'
);
foreach ($a as $secs => $str)
{
$d = $etime / $secs;
if ($d >= 1)
{
$r = round($d);
// EX:
return array('date' => $day.'-'.$month.'-'.$year, // 2016-02-20
'time' => $time, // 03:30:04
'difference' => $r . ' ' . $str . ' ago' // 2 month ago
);
}
}
}
我这样使用它:
$ptime = 1470692661;
$html = '<span title="date: '.time_elapsed_string($ptime)['date'].' time: '.time_elapsed_string($ptime)['time'].'">in '.time_elapsed_string($ptime)['difference'].'<span>';
如您所见,我正在使用该功能的结果如下:
time_elapsed_string($ptime)['date']
ime_elapsed_string($ptime)['time']
time_elapsed_string($ptime)['difference']
事实上,每次我需要其中一个结果时,我都会调用该函数。是对的吗?或者我应该调用一次并将其存储到数组中?
注意:我的代码也适用。
答案 0 :(得分:5)
从某个日期/时间开始计算的时间是 mauvais ton 。
从PHP 5.2.0开始, DateTime
已经可用,并且很多人都低估了它。为什么不使用此代替loop
和if
s?
$create_time = "2016-08-02 12:35:04";
$current_time="2016-08-02 16:16:02";
$dtCurrent = DateTime::createFromFormat('Y-m-d H:i:s', $current_time);
// to use current timestamp, use the following:
//$dtCurrent = new DateTime();
$dtCreate = DateTime::createFromFormat('Y-m-d H:i:s', $create_time);
$diff = $dtCurrent->diff($dtCreate);
现在,您可以根据需要format结果:
$interval = $diff->format("%h hours %i minutes %s seconds");
这将提供一个干净的3 hours 40 minutes 58 seconds
,没有任何数组,这是更好的。
<强>更新强>
通过正则表达式获得小时/分钟/秒的一般解决方案:
$interval = $diff->format("%y years %m months %d days %h hours %i minutes %s seconds");
// now remove zero values
$interval = preg_replace('/(^0| 0) (years|months|days|hours|minutes|seconds)/', '', $interval);
更新2
截至评论:
看,我想用你的方法..但我真的无法实现它..其实我需要三件事:
time
,date
,difference
..!但你的做法并没有给我他们......
好吧,我们已经知道如何获得差异,这是上面描述的$interval
变量。
要获取时间和日期,您可以再次使用格式从$dtCreate
变量中获取:
$time = $dtCreate->format('H:i:s');
$date = $dtCreate->format('d-m-Y');
答案 1 :(得分:4)
这是一个没脑子的人。
是 - 将@Id
@Column(name = "MY_ID")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer myId;
// more variables, getters/setters
的函数调用结果存储在数组中,然后使用它来访问结果。否则你会浪费CPU周期!
time_elapsed_string($ptime)