用PHP在用户格式化样式中显示日期

时间:2012-09-26 07:22:28

标签: php mysql

我注意到Facebook,Twitter和许多其他网站正在使用用户帖子和评论的相对日期和时间字符串描述。

例如,"约3个月前发表的评论"而不是在2012年9月20日写的评论。"我决定在我的网站上做同样的事情。在我的网站中我需要显示1天前,2天前,3天前,...... 1周前,2周前,.... 1个月前,2个月前,..... 。1年前,2年前......等等。

我已经有用户注册日期,需要使用当前日期和时间进行检查,并且需要在我的主页上使用以上样式进行显示。

在我的数据库中,用户注册的日期格式是这样的。' 2012-09-23 09:11:02'

任何人都可以帮我在php中构建这个脚本......它会非常适合。

谢谢。

3 个答案:

答案 0 :(得分:1)

请尝试以下代码

function time_elapsed_since ($postedDateTime){

    $time = time() - $postedDateTime; // to get the time since that moment

         $tokens = array (
                      31536000 => 'year',
                      2592000 => 'month',
                      604800 => 'week',
                      86400 => 'day',
                      3600 => 'hour',
                      60 => 'minute',
                      1 => 'second'
                  );

                  foreach ($tokens as $unit => $text) {
                      if ($time < $unit) continue;
                      $numberOfUnits = floor($time / $unit);
                      return $numberOfUnits.' '.$text.(($numberOfUnits>1)?'s':'');
                  }

    }

用法:

time_elapsed_since($postedDateTime).' ago'; // 2012-09-23 09:11:02 format

答案 1 :(得分:1)

试试这个

function time_ago($time) {

   $periods = array("second", "minute", "hour", "day", "week", "month", "year", "decade");
   $lengths = array("60","60","24","7","4.35","12","10");

   $now = time();

   $difference = $now - $time;
   $tense = "ago";

   for($j = 0; $difference >= $lengths[$j] && $j < count($lengths)-1; $j++) {
        $difference /= $lengths[$j];
   }

   $difference = round($difference);

   if($difference != 1) {
        $periods[$j].= "s";
   }

   return "$difference $periods[$j] 'ago' ";
}

答案 2 :(得分:0)

我猜他们正在使用unixtime,即自1970年以来的秒数(这是标准的)。我建议你也应该保持这种格式的日期。如果他们使用unix时间,您可以使用PHP中的以下日期函数将其转换为上面的格式:

<?php
date('Y-m-t H:i:s', $facebookTime);

此致 凯文