使用php获取正常的用户可读取的日期/时间 [英] Get normal user readable date/time with php
问题描述
我知道这个问题已经被问到了2-3次,而且我使用了一个我在其中一个答案(检查它),但对我来说似乎没有什么好处,我在那里问评论,但没有得到任何回复,所以我在这里打开一个新的问题。以下是从datetime(mysql类型)获取纯文本日期/时间的代码。
function getElapsedTime($ time_stamp)
{
$ ts = convert_datetime($ time_stamp);
$ time_stamp = $ ts;
$ time_difference = strtotime('now') - $ time_stamp;
if($ time_difference> = 60 * 60 * 24 * 365.242199)
{
return get_time_ago_string($ time_stamp,60 * 60 * 24 * 365.242199,'year') ;
}
elseif($ time_difference> = 60 * 60 * 24 * 30.4368499)
{
return get_time_ago_string($ time_stamp,60 * 60 * 24 * 30.4368499,'month' );
}
elseif($ time_difference> = 60 * 60 * 24 * 7)
{
返回get_time_ago_string($ time_stamp,60 * 60 * 24 * 7,'week' );
}
elseif($ time_difference> = 60 * 60 * 24)
{
返回get_time_ago_string($ time_stamp,60 * 60 * 24,'day');
}
elseif($ time_difference> = 60 * 60)
{
return get_time_ago_string($ time_stamp,60 * 60,'hour');
}
elseif($ time_difference< = 60)
{
return get_time_ago_string($ time_stamp,60,'minute');
}
}
函数get_time_ago_string($ time_stamp,$ divisor,$ time_unit)
{
$ time_difference = strtotime(now) - $ time_stamp
$ time_units = floor($ time_difference / $ divisor);
settype($ time_units,'string');
if($ time_units ==='0')
{
返回'小于1'。 $ time_unit。 前
}
elseif($ time_units ==='1')
{
返回'1'。 $ time_unit。 前
}
else
{
return $ time_units。 。 $ time_unit。之前的'
}
}
函数convert_datetime($ str){
列表($ date,$ time)= explode('',$ str) ;
list($ year,$ month,$ day)= explode(' - ',$ date);
list($ hour,$ minute,$ second)= explode(':',$ time);
$ timestamp = mktime($ hour,$ minute,$ second,$ month,$ day,$ year);
return $ timestamp;
}
我已经添加了一个函数convert_datetime(),将mysql datetime日期转换为时间戳,因为我认为函数getElapsedTime()是期待时间戳,因为当我传递正常的datetime日期(mysql格式),它不工作。所以现在,我将mysql datetime传递给getElapsedTime(),并使用convert_datetime()函数将其转换为时间戳,并使用它获取字符串。
但是当预期日期返回分钟或秒,其返回为负值。例如它的-182分钟前为2013-05-23 15:59:58。
有人知道如何完成它吗? >
//尝试此功能
function time_ago($ ptime){
$ ptime = strtotime($ ptime);
if($ ptime){
$ etime = time() - $ ptime;
if($ etime< 1)
返回'几秒钟';
$ a = array(
12 * 30 * 24 * 60 * 60 =>'year',
30 * 24 * 60 * 60 =>'month',
24 * 60 * 60 =>'天',
60 * 60 =>'小时',
60 =>'分钟',
1 =
);
foreach($ a as $ secs => $ str){
$ d = $ etime / $ secs;
if($ d> = 1){
$ r = round($ d);
返回$ r。 。 $ str。 ($ r> 1?'s':'')。
}
}
}
返回'0';
}
//使用
<回复时间_('2013-05-23 15:59:58'); pre>
echo time_ago(date('Y:m:d H:i:s'));
//输出
43分钟
几秒钟
I know this question has been asked 2-3 times before, and I am using a function which I found in one of the answers(check it here) from those questions, but it doesnt seem to be working fine for me, i asked there in comments but didnt get any reply, so I am opening a new question here. following is the code to get plain text date/time from a datetime(mysql type).
function getElapsedTime($time_stamp)
{
$ts = convert_datetime($time_stamp);
$time_stamp = $ts;
$time_difference = strtotime('now') - $time_stamp;
if ($time_difference >= 60 * 60 * 24 * 365.242199)
{
return get_time_ago_string($time_stamp, 60 * 60 * 24 * 365.242199, 'year');
}
elseif ($time_difference >= 60 * 60 * 24 * 30.4368499)
{
return get_time_ago_string($time_stamp, 60 * 60 * 24 * 30.4368499, 'month');
}
elseif ($time_difference >= 60 * 60 * 24 * 7)
{
return get_time_ago_string($time_stamp, 60 * 60 * 24 * 7, 'week');
}
elseif ($time_difference >= 60 * 60 * 24)
{
return get_time_ago_string($time_stamp, 60 * 60 * 24, 'day');
}
elseif ($time_difference >= 60 * 60)
{
return get_time_ago_string($time_stamp, 60 * 60, 'hour');
}
elseif($time_difference <= 60)
{
return get_time_ago_string($time_stamp, 60, 'minute');
}
}
function get_time_ago_string($time_stamp, $divisor, $time_unit)
{
$time_difference = strtotime("now") - $time_stamp;
$time_units = floor($time_difference / $divisor);
settype($time_units, 'string');
if ($time_units === '0')
{
return 'less than 1 ' . $time_unit . ' ago';
}
elseif ($time_units === '1')
{
return '1 ' . $time_unit . ' ago';
}
else
{
return $time_units . ' ' . $time_unit . 's ago';
}
}
function convert_datetime($str) {
list($date, $time) = explode(' ', $str);
list($year, $month, $day) = explode('-', $date);
list($hour, $minute, $second) = explode(':', $time);
$timestamp = mktime($hour, $minute, $second, $month, $day, $year);
return $timestamp;
}
I have added one more function convert_datetime() which turns mysql datetime date into timestamp, as I thought the function getElapsedTime() is expecting timestamp, because when I was passing normal datetime date(mysql format), it wasn't working. So now, I am passing mysql datetime to getElapsedTime() and converting it into timestamp using convert_datetime() function and using it to get string.
But when the date is expected to return for "minute" or "second", its returning in negative value. eg its returning "-182 minutes ago" for "2013-05-23 15:59:58"..
Anybody knows how to get it done?
// try this function
function time_ago($ptime) {
$ptime = strtotime($ptime);
if ($ptime) {
$etime = time() - $ptime;
if ($etime < 1)
return 'few seconds';
$a = array(
12 * 30 * 24 * 60 * 60 => 'year',
30 * 24 * 60 * 60 => 'month',
24 * 60 * 60 => 'day',
60 * 60 => 'hour',
60 => 'minute',
1 => 'second'
);
foreach ($a as $secs => $str) {
$d = $etime / $secs;
if ($d >= 1) {
$r = round($d);
return $r . ' ' . $str . ($r > 1 ? 's' : '') . '';
}
}
}
return '0';
}
// usage
echo time_ago('2013-05-23 15:59:58');
echo time_ago(date('Y:m:d H:i:s'));
// Output
43 minutes
few seconds
这篇关于使用php获取正常的用户可读取的日期/时间的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!