工具类(HumanDate)

 <?php
/**
 *@author Andy
 *@datetime 2014-6-6
 */ 
class HumanDate
{
    static $MINUTE = 60;
    static $HOUR = 3600; //static::$MINUTE * 60
    static $DAY = 86400; //static::$HOUR * 24
    static $WEEK = 604800; //static::$DAY * 7
    static $MONTH = 2628000; //static::$YEAR / 12
    static $YEAR = 31536000; //static::$DAY * 365

    protected $formats; // ago
    protected $futureformats; // future

    /**
     * Create new instance, initialize $formats array
     */
    public function __construct()
    {
        $this->formats = array(
            array(0.7 * static::$MINUTE, 'just now',       1),
            array(1.5 * static::$MINUTE, 'a minute ago',   1),
            array( 60 * static::$MINUTE, '%d minutes ago', static::$MINUTE),
            array(1.5 * static::$HOUR,   'an hour ago',    1),
            array(      static::$DAY,    '%d hours ago',   static::$HOUR),
            array(  2 * static::$DAY,    'yesterday',      1),
            array(  7 * static::$DAY,    '%d days ago',    static::$DAY),
            array(1.5 * static::$WEEK,   'a week ago',     1),
            array(      static::$MONTH,  '%d weeks ago',   static::$WEEK),
            array(1.5 * static::$MONTH,  'a month ago',    1),
            array(      static::$YEAR,   '%d months ago',  static::$MONTH),
            array(1.5 * static::$YEAR,   'a year ago',     1),
            array(PHP_INT_MAX,           '%d years ago',   static::$YEAR)
        );
        $this->futureformats = array(
            array(0.7 * static::$MINUTE, 'in a moment',   -1),
            array(1.5 * static::$MINUTE, 'in a minute',   -1),
            array( 60 * static::$MINUTE, 'in %d minutes', -static::$MINUTE),
            array(1.5 * static::$HOUR,   'in an hour',    -1),
            array(      static::$DAY,    'in %d hours',   -static::$HOUR),
            array(  2 * static::$DAY,    'tomorrow',      -1),
            array(  7 * static::$DAY,    'in %d days',    -static::$DAY),
            array(1.5 * static::$WEEK,   'in a week',     -1),
            array(      static::$MONTH,  'in %d weeks',   -static::$WEEK),
            array(1.5 * static::$MONTH,  'in a month',    -1),
            array(      static::$YEAR,   'in %d months',  -static::$MONTH),
            array(1.5 * static::$YEAR,   'in a year',     -1),
            array(PHP_INT_MAX,           'in %d years',   -static::$YEAR)
        );
    }

    /**
     * @return string Human readable time difference ("a week ago")
     */
    public function get($delta)
    {
if (!is_numeric($delta)) {
            return;
        }
$delta = (int)$delta; // start - end
        if ($delta >= 0) {
            foreach ($this->formats as $format) {
                if ($delta < $format[0]) {
                    return sprintf(
                        $format[1],
                        round($delta / $format[2])
                    );
                }
            };
        } else {
            foreach ($this->futureformats as $format) {
                if (-$delta < $format[0]) {
                    return sprintf(
                        $format[1],
                        round($delta / $format[2])
                    );
                }
            };

        }
    }

}

?>

用法:
require_once 'HumanDate.php'; // 加载该类
$hd = new HumanDate();  // 初始化该类
echo $hd->get(40) ;  //shows "just now"   // 参数为unix时间戳。正数表示:现在-过去,显示ago;负数:现在-将来,显示future。

设计该类目的:用于格式化用户距今登陆日期,显示更符合人类习惯。

若想汉化为中文版,直接替换英文字符串即可。
若想使用Java、C#、Python、C++/C等等版本,请自觉自行重写该类。

设计该类目的:用于格式化用户距今登陆日期,显示更符合人类习惯。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值