文档章节

php日期时间处理类

Falltohim
 Falltohim
发布于 2017/03/31 11:43
字数 1363
阅读 31
收藏 0
<?php

class LibTime{
    /**
     * 获得当前格林威治时间的时间戳
     *
     * @return  integer
     */
    function gmtime(){
        return time();
    }
    /**
     * 获得服务器的时区
     *
     * @return  integer
     */
    function server_timezone(){
        if (function_exists('date_default_timezone_get')){
            return date_default_timezone_get();
        } else{
            return date('Z') / 3600;
        }
    }
    /**
     *  生成一个用户自定义时区日期的GMT时间戳
     *
     * @access  public
     * @param   int     $hour
     * @param   int     $minute
     * @param   int     $second
     * @param   int     $month
     * @param   int     $day
     * @param   int     $year
     *
     * @return void
     */
    function local_mktime($hour = NULL , $minute= NULL, $second = NULL,  $month = NULL,  $day = NULL,  $year = NULL){
        $shopConfig = loadShopConfig();
        $timezone = $shopConfig['timezone'];
        /**
        * $time = mktime($hour, $minute, $second, $month, $day, $year) - date('Z') + (date('Z') - $timezone * 3600)
        * 先用mktime生成时间戳,再减去date('Z')转换为GMT时间,然后修正为用户自定义时间。以下是化简后结果
        **/
        $time = mktime($hour, $minute, $second, $month, $day, $year) - $timezone * 3600;
        return $time;
    }
    /**
     * 将GMT时间戳格式化为用户自定义时区日期
     *
     * @param  string       $format
     * @param  integer      $time       该参数必须是一个GMT的时间戳
     *
     * @return  string
     */

    function local_date($format, $time = NULL){
        if ($time === NULL){
            $time = $this->gmtime();
        }elseif ($time <= 0){
            return '';
        }
        return date($format, $time);
    }
    /**
     * 转换字符串形式的时间表达式为GMT时间戳
     *
     * @param   string  $str
     *
     * @return  integer
     */
    function gmstr2time($str){
        $time = strtotime($str);
        if ($time > 0){
            $time -= date('Z');
        }
        return $time;
    }
    /**
     *  将一个用户自定义时区的日期转为GMT时间戳
     *
     * @access  public
     * @param   string      $str
     *
     * @return  integer
     */
    function local_strtotime($str){
        $time = strtotime($str);
        return $time;
    }
    /**
     * 获得用户所在时区指定的时间戳
     *
     * @param   $timestamp  integer     该时间戳必须是一个服务器本地的时间戳
     *
     * @return  array
     */
    function local_gettime($timestamp = NULL){
        $tmp = local_getdate($timestamp);
        return $tmp[0];
    }
    /**
     * 获得用户所在时区指定的日期和时间信息
     *
     * @param   $timestamp  integer     该时间戳必须是一个服务器本地的时间戳
     *
     * @return  array
     */
    function local_getdate($timestamp = NULL){
        $shopConfig = loadShopConfig();
        $timezone = $shopConfig['timezone'];
        /* 如果时间戳为空,则获得服务器的当前时间 */
        if ($timestamp === NULL){
            $timestamp = time();
        }
        $gmt        = $timestamp - date('Z');       // 得到该时间的格林威治时间
        $local_time = $gmt + ($timezone * 3600);    // 转换为用户所在时区的时间戳
        return getdate($local_time);
    }
    function getWeek($unixTime=''){
        $unixTime=is_numeric($unixTime) ? $unixTime : time();
        $weekarray=array('日','一','二','三','四','五','六');
        return '周'.$weekarray[date('w',$unixTime)];
    }
    //获得时间天数
    function get_times($data=array()){
        if (isset($data['time']) && $data['time']!=""){
            $time = $data['time'];//时间
        }elseif(isset($data['date']) && $data['date']!=""){
            $time = strtotime($data['date']);//日期
        }else{
            $time = time();//现在时间
        }
        if (isset($data['type']) && $data['type']!=""){ 
            $type = $data['type'];//时间转换类型,有day week month year
        }else{
            $type = "month";
        }
        if (isset($data['num']) && $data['num']!=""){ 
            $num = $data['num'];
        }else{
            $num = 1;
        }
        if ($type=="month"){
            $month = date("m",$time);
            $year = date("Y",$time);
            $_result = strtotime("$num month",$time);
            $_month = (int)date("m",$_result);
            if($month+$num>12){
                $_num = $month+$num-12;
                $year = $year+1;
            }else{
                $_num = $month+$num;
            }
            if ($_num!=$_month){
                $_result = strtotime("-1 day",strtotime("{$year}-{$_month}-01"));
            }
        }else{
            $_result = strtotime("$num $type",$time);
        }
        if(isset($data['format']) && $data['format']!=""){ 
            return date($data['format'],$_result);
        }else{
            return $_result;
        }
    }
    // 以上两个函数的时间段获取应用
    function getFilter($n){
        $ret=array();
        switch($n){
            case 1:// 昨天
                $ret['sdate']=date('Y-m-d 00:00:00',strtotime('-1 day'));
                $ret['edate']=date('Y-m-d 23:59:59',strtotime('-1 day'));
            break;
            case 2://本星期
                $ret=getWeekRange(date('Y-m-d'));
            break;
            case 3://上一个星期
                $strDate=date('Y-m-d',strtotime('-1 week'));
                $ret=getWeekRange($strDate);
            break;
            case 4: //上上星期
                $strDate=date('Y-m-d',strtotime('-2 week'));
                $ret=getWeekRange($strDate);
            break;
            case 5: //本月
                $ret=getMonthRange(date('Y-m-d'));
            break;
            case 6://上月
                $strDate=date('Y-m-d',strtotime('-1 month'));
                $ret=getMonthRange($strDate);
            break;
        }
            return $ret;
    }
    //获取当前星期的日期范围,也就是从星期一到星期日的日期范围
    function getWeekRange($date){
        $ret=array();
        $timestamp=strtotime($date);
        $w=strftime('%u',$timestamp);
        $ret['sdate']=date('Y-m-d 00:00:00',$timestamp-($w-1)*86400);
        $ret['edate']=date('Y-m-d 23:59:59',$timestamp+(7-$w)*86400);
        return $ret;
    }
    //获取指定日期所在月的开始日期与结束日期
    function getMonthRange($date){
        $ret=array();
        $timestamp=strtotime($date);
        $mdays=date('t',$timestamp);
        $ret['sdate']=date('Y-m-1 00:00:00',$timestamp);
        $ret['edate']=date('Y-m-'.$mdays.' 23:59:59',$timestamp);
        return $ret;
    }
    /*
    格式化显示时间
    */
    function getLastTimeFormt($time,$type=0){
        if($type==0) $f="m-d H:i"; 
        else if($type==1) $f="Y-m-d H:i";
        $agoTime = time() - $time;
        if ( $agoTime <= 60&&$agoTime >=0 ) {
            return $agoTime.'秒前';
        }elseif( $agoTime <= 3600 && $agoTime > 60 ){
            return intval($agoTime/60) .'分钟前';
        }elseif ( date('d',$time) == date('d',time()) && $agoTime > 3600){
            return '今天 '.date('H:i',$time);
        }elseif( date('d',$time+86400) == date('d',time()) && $agoTime < 172800){
            return '昨天 '.date('H:i',$time);
        }else{
            return date($f,$time);
        }
    }
    //把秒换成小时或者天数
    function second2string($second,$type=0){
        $day = floor($second/(3600*24));
        $second = $second%(3600*24);//除去整天之后剩余的时间
        $hour = floor($second/3600);
        $second = $second%3600;//除去整小时之后剩余的时间 
        $minute = floor($second/60);
        $second = $second%60;//除去整分钟之后剩余的时间 
        switch($type){
            case 0:
                if($day>=1) $res = $day."天";
                elseif($hour>=1) $res = $hour."小时";
                else  $res = $minute."分钟";
            break;
            case 1:
                if($day>=5) $res = date("Y-m-d H:i",time()+$second);
                elseif($day>=1&&$day<5) $res = $day."天前";
                elseif($hour>=1) $res = $hour."小时前";
                else  $res = $minute."分钟前";
            break;
        }
        //返回字符串
        return $res;
    }
    function getTransferLeftmonth($deadline){
        $lefttime = $deadline-time();
        if($lefttime<=0) return 0;
        //echo $lefttime/(24*3600*30);
        $leftMonth = floor($lefttime/(24*3600*30));
        return $leftMonth;
    }
    /**
     * 友好时间显示
     * @param $time
     * @return bool|string
     */
    function friend_date($time){
        if (!$time)
            return false;
        $fdate = '';
        $d = time() - intval($time);
        $ld = $time - mktime(0, 0, 0, 0, 0, date('Y')); //得出年
        $md = $time - mktime(0, 0, 0, date('m'), 0, date('Y')); //得出月
        $byd = $time - mktime(0, 0, 0, date('m'), date('d') - 2, date('Y')); //前天
        $yd = $time - mktime(0, 0, 0, date('m'), date('d') - 1, date('Y')); //昨天
        $dd = $time - mktime(0, 0, 0, date('m'), date('d'), date('Y')); //今天
        $td = $time - mktime(0, 0, 0, date('m'), date('d') + 1, date('Y')); //明天
        $atd = $time - mktime(0, 0, 0, date('m'), date('d') + 2, date('Y')); //后天
        if ($d == 0) {
            $fdate = '刚刚';
        }else{
            switch ($d) {
                case $d < $atd:
                    $fdate = date('Y年m月d日', $time);
                    break;
                case $d < $td:
                    $fdate = '后天' . date('H:i', $time);
                    break;
                case $d < 0:
                    $fdate = '明天' . date('H:i', $time);
                    break;
                case $d < 60:
                    $fdate = $d . '秒前';
                    break;
                case $d < 3600:
                    $fdate = floor($d / 60) . '分钟前';
                    break;
                case $d < $dd:
                    $fdate = floor($d / 3600) . '小时前';
                    break;
                case $d < $yd:
                    $fdate = '昨天' . date('H:i', $time);
                    break;
                case $d < $byd:
                    $fdate = '前天' . date('H:i', $time);
                    break;
                case $d < $md:
                    $fdate = date('m月d日 H:i', $time);
                    break;
                case $d < $ld:
                    $fdate = date('m月d日', $time);
                    break;
                default:
                    $fdate = date('Y年m月d日', $time);
                    break;
            }
        }
        return $fdate;
    }
}

 

© 著作权归作者所有

上一篇: PHP签名
下一篇: php数组助手类
Falltohim
粉丝 0
博文 6
码字总数 1363
作品 0
石家庄
私信 提问
日期及时间处理包 Carbon 在 Laravel 中的简单使用

在编写 PHP 应用时经常需要处理日期和时间,这篇文章带你了解一下 Carbon – 继承自 PHP DateTime 类的 API 扩展,它使得处理日期和时间更加简单。Laravel 中默认使用的时间处理类就是 Carb...

郭周园
2018/09/03
61
0
Carbon 时间处理类中文文档

Introduction Carbon 是php的日期处理类库(A simple PHP API extension for DateTime.)。 Carbon 继承了PHP的 Datetime 类,所以 Carbon 中没有涉及到的,但在 Datetime 中已经实现的方法都...

柳浪闻笛
2018/01/05
0
0
MySQL:UNIX时间戳与日期的相互转换

在PHP+MySQL编程中,UNIX时间戳和格式化日期是我们常打交道的两个时间表示形式,Unix时间戳存储、处理方便,但是不直观,格式化日期直观,但是处理起来不如Unix时间戳那么自如,所以有的时候...

BENNEE
2011/03/31
297
0
Java 8中处理日期和时间示例

在Java 8以前,日期和时间处理一直被广大java程序员抱怨太难用,首先是和中,都包含类,如果要处理类处理。同时中既包含了日期,又包含了时间,所以java8新的日期和时间库,很好的解决了以前...

Skqing
01/23
90
0
Java 8 的时间日期 API

上一篇文章『Java 的时间日期 API』中,我们学习了由 Date、Calendar,DateFormat 等组成的「传统时间日期 API」,但是传统的处理接口设计并不是很友好,不易使用。终于,Java 8 借鉴第三方优...

Single_YAM
2018/04/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

nginx学习笔记

中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯。 是连接两个独立应用程序或独立系统的软件。 web请求通过中间件可以直接调用操作系统,也可以经过中间件把请求分发到多...

码农实战
今天
5
0
Spring Security 实战干货:玩转自定义登录

1. 前言 前面的关于 Spring Security 相关的文章只是一个预热。为了接下来更好的实战,如果你错过了请从 Spring Security 实战系列 开始。安全访问的第一步就是认证(Authentication),认证...

码农小胖哥
今天
10
0
JAVA 实现雪花算法生成唯一订单号工具类

import lombok.SneakyThrows;import lombok.extern.slf4j.Slf4j;import java.util.Calendar;/** * Default distributed primary key generator. * * <p> * Use snowflake......

huangkejie
昨天
12
0
PhotoShop 色调:RGB/CMYK 颜色模式

一·、 RGB : 三原色:红绿蓝 1.通道:通道中的红绿蓝通道分别对应的是红绿蓝三种原色(RGB)的显示范围 1.差值模式能模拟三种原色叠加之后的效果 2.添加-颜色曲线:调整图像RGB颜色----R色增强...

东方墨天
昨天
11
1
将博客搬至CSDN

将博客搬至CSDN

算法与编程之美
昨天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部