使用php获取正常的用户可读取的日期/时间 [英] Get normal user readable date/time with php

查看:153
本文介绍了使用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆