国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

PHP實現的一個時間幫助類

ky0ncheng / 2362人閱讀

摘要:背景工作的過程中經常會遇到各種時間類的操作,因此封裝了一個幫助工具類,提高代碼的復用率主要功能根據相差的天數獲取連續的時間段根據相差的天數獲取所有連續的時間段轉化查詢條件根據兩個日期獲取連續的時間段根據開始和結束時間獲取所

背景

工作的過程中經常會遇到各種時間類的操作,因此封裝了一個幫助工具類,提高代碼的復用率

主要功能 根據相差的天數獲取連續的時間段
/**
     * 根據相差的天數獲取所有連續的時間段
     * @param $diffDay
     * @param string $dateFormat
     * @return array
     */
    public static function getContinuesDayDiffDay($diffDay, $dateFormat = "Y-m-d") {
        $today = date("Y-m-d");
        $timeLabel = [];
        for ($i=1;$i<=$diffDay;$i++){
            $diff = $diffDay - $i;
            $mday = date($dateFormat,strtotime("$today -$diff day"));
            array_push($timeLabel,$mday);
        }
        //轉化查詢條件
        $year = date("Y");
        $startDay = str_replace(".","-",$timeLabel[0]);
        $endDay = str_replace(".","-",$timeLabel[$diffDay-1]);
        $startTime = strtotime($startDay." 00:00:00");
        $endTime = strtotime($endDay." 23:59:59");
        return [
            "start_time" => $startTime,
            "end_time" => $endTime,
            "time_label" => $timeLabel,
        ];
    }
根據兩個日期獲取連續的時間段
/**
     * 根據開始和結束時間獲取所有連續的時間段
     * @param string $startDay 開始日期 格式:Y-m-d
     * @param string $endDay 開始日期 格式:Y-m-d
     * @param string $dateFormat
     * @return array
     */
    public static function getContinuesDayByRange($startDay, $endDay, $dateFormat = "Y-m-d") {
        $timeLabel = [];
        if(strtotime($startDay) > strtotime($endDay)){
            $tmp = $startDay;
            $endDay = $tmp;
            $startDay = $endDay;
        }
        if($startDay == $endDay){
            array_push($timeLabel,$startDay);

            $startTime = strtotime($startDay." 00:00:00");
            $endTime = strtotime($endDay." 23:59:59");
            $timeLabel =  [
                "start_time" => $startTime,
                "end_time" => $endTime,
                "time_label" => $timeLabel,
            ];
            return $timeLabel;
        }

        $targetDay = $startDay;
        while ($targetDay != $endDay){
            array_push($timeLabel,$targetDay);
            $targetDay = date($dateFormat,strtotime("$targetDay +1 day"));
        }

        array_push($timeLabel,$endDay);

        //增加
        $startTime = strtotime($startDay." 00:00:00");
        $endTime = strtotime($endDay." 23:59:59");
        $timeLabel =  [
            "start_time" => $startTime,
            "end_time" => $endTime,
            "time_label" => $timeLabel,
        ];
        return $timeLabel;
    }
根據日期獲取當月的開始時間和結束時間
 /**
     * 根據日期獲取本月的開始時間和結束時間
     * @param $date   Y-m    2017-10
     * @return array
     */
    public static function getMonthDaysByDate($date) {
        $data = [];
        $timestamp = strtotime( $date );
        $data["start_time"] = date( "Y-m-01 00:00:00", $timestamp );
        $mdays = date( "t", $timestamp );
        $data["end_time"] = date( "Y-m-" . $mdays . " 23:59:59", $timestamp );
        return $data;
    }
時間友好格式化風格
/**
     * 時間友好型提示風格化(即微博中的XXX小時前、昨天等等)
     * 即微博中的 XXX 小時前、昨天等等, 時間超過 $time_limit 后返回按 out_format 的設定風格化時間戳
     * @param  int
     * @param  int
     * @param  string
     * @param  array
     * @param  int
     * @return string
     */
    public static function getFriendlyTime($timestamp, $timeLimit = 604800, $out_format = "Y/m/d", $formats = null, $now = null){
        /*if (get_setting("time_style") == "N")
        {
            return date($out_format, $timestamp);
        }*/

        if (!$timestamp)
        {
            return false;
        }

        if ($formats == null)
        {
            $formats = [
                "YEAR" =>"%s 年前",
                "MONTH" => "%s 月前",
                "DAY" => "%s 天前",
                "HOUR" => "%s 小時前",
                "MINUTE" => "%s 分鐘前",
                "SECOND" => "%s 秒前"
            ];
        }

        $now = $now == null ? time() : $now;
        $seconds = $now - $timestamp;

        if ($seconds == 0)
        {
            $seconds = 1;
        }

        if (!$timeLimit OR $seconds > $timeLimit)
        {
            return date($out_format, $timestamp);
        }

        $minutes = floor($seconds / 60);
        $hours = floor($minutes / 60);
        $days = floor($hours / 24);
        $months = floor($days / 30);
        $years = floor($months / 12);

        if ($years > 0)
        {
            $diffFormat = "YEAR";
        }
        else
        {
            if ($months > 0)
            {
                $diffFormat = "MONTH";
            }
            else
            {
                if ($days > 0)
                {
                    $diffFormat = "DAY";
                }
                else
                {
                    if ($hours > 0)
                    {
                        $diffFormat = "HOUR";
                    }
                    else
                    {
                        $diffFormat = ($minutes > 0) ? "MINUTE" : "SECOND";
                    }
                }
            }
        }

        $dateDiff = null;

        switch ($diffFormat)
        {
            case "YEAR" :
                $dateDiff = sprintf($formats[$diffFormat], $years);
                break;
            case "MONTH" :
                $dateDiff = sprintf($formats[$diffFormat], $months);
                break;
            case "DAY" :
                $dateDiff = sprintf($formats[$diffFormat], $days);
                break;
            case "HOUR" :
                $dateDiff = sprintf($formats[$diffFormat], $hours);
                break;
            case "MINUTE" :
                $dateDiff = sprintf($formats[$diffFormat], $minutes);
                break;
            case "SECOND" :
                $dateDiff = sprintf($formats[$diffFormat], $seconds);
                break;
        }

        return $dateDiff;
    }
根據日期獲取是星期幾
/**
     * 獲取星期幾
     * @param $date
     * @return
     */
    public static function getWeekDay($date) {
        //強制轉換日期格式
        $dateStr=date("Y-m-d",strtotime($date));
        //封裝成數組
        $arr=explode("-", $dateStr);
        //參數賦值
        //年
        $year=$arr[0];

        //月,輸出2位整型,不夠2位右對齊
        $month=sprintf("%02d",$arr[1]);
        //日,輸出2位整型,不夠2位右對齊
        $day=sprintf("%02d",$arr[2]);

        //時分秒默認賦值為0;
        $hour = $minute = $second = 0;

        //轉換成時間戳
        $strap = mktime($hour,$minute,$second,$month,$day,$year);

        //獲取數字型星期幾
        $numberWk=date("w",$strap);

        //自定義星期數組
        $weekArr=array(7,1,2,3,4,5,6);

        //獲取數字對應的星期
        return $weekArr[$numberWk];
    }
獲取指定日期前后相同時間天數的時間范圍
/**
     * 獲取指定日期前后相同時間天數的范圍時間
     * @param int $dayDiff
     * @param string $day
     * @param string $dateFormat
     * @return array
     */
    public static function getPointDaySameRangeContinuesTime($dayDiff = 0,$day = "", $dateFormat = "Y-m-d") {
        $day = $day?$day:date($dateFormat);
        $startTime = date($dateFormat,strtotime("$day -$dayDiff day"));
        $endTime = date($dateFormat,strtotime("$day +$dayDiff day"));
        $result = self::getContinuesDayByRange($startTime,$endTime,$dateFormat = "Y-m-d");
        return $result;
    }
獲取兩個日期之間相差的天數
/**
     * 獲取兩個日期之間相差的天數
     * @param string $day1 第一個日期,格式為Y-m-d
     * @param string $day2 第二個日期,格式為Y-m-d
     * @return integer
     */
    public static function getDiffBetweenTwoDays($day1, $day2) {
        $second1 = strtotime($day1);
        $second2 = strtotime($day2);
        if ($second1 < $second2) {
            $tmp = $second2;
            $second2 = $second1;
            $second1 = $tmp;
        }
        return ($second1 - $second2) / 86400;
    }
根據指定日期和天數,獲取結束的日期
/**
     * 根據日期和相差的天數獲取結束的天數
     * @param $day
     * @param $diffDay
     * @param bool $isBefore
     * @return false|string
     */
    public static function getEndDayByDayAndDiff($day, $diffDay, $isBefore = false) {
        $operator = $isBefore ? "-" : "+";
        $endDay = date("Y-m-d",strtotime("$day $operator $diffDay day"));
        return $endDay;
    }
判斷兩個日期是否為同一天
/**
     * 判斷兩個時間是否同一天
     * @param string $date1 Y-m-d
     * @param string $date2 Y-m-d
     * @return bool
     */
    public static function isSameDay($date1, $date2) {
        $day1 = self::dateTime(strtotime($date1)) ;
        $day2 = self::dateTime(strtotime($date2));
        return $day1 == $day2;
    }
轉換秒鐘為分鐘
/**
     * 轉換秒鐘為分鐘
     * @param $seconds
     * @return string
     */
    public static function convertSecondToTime($seconds) {
        $reminded = strval($seconds % 60);
        $minute = strval(($seconds - $reminded) / 60);
        if(strlen($minute)<2){
            $minute = "0".$minute;
        }
        if(strlen($reminded)<2){
            $reminded = "0".$reminded;
        }
        $time = $minute.":".$reminded;
        return $time;
    }
獲取毫秒數
/**
     * 獲取時間的毫秒數
     * @return float
     */
    public static function millisecond() {
        list($msec, $sec) = explode(" ", microtime());
        return (float)sprintf("%.0f", (floatval($msec) + floatval($sec)) * 1000);
    }
附錄:完整的時間幫助類代碼
 $startTime,
            "end_time" => $endTime,
            "time_label" => $timeLabel,
        ];
    }

    /**
     * 根據開始和結束時間獲取所有連續的時間段
     * @param string $startDay 開始日期 格式:Y-m-d
     * @param string $endDay 開始日期 格式:Y-m-d
     * @param string $dateFormat
     * @return array
     */
    public static function getContinuesDayByRange($startDay, $endDay, $dateFormat = "Y-m-d") {
        $timeLabel = [];
        if(strtotime($startDay) > strtotime($endDay)){
            $tmp = $startDay;
            $endDay = $tmp;
            $startDay = $endDay;
        }
        if($startDay == $endDay){
            array_push($timeLabel,$startDay);

            $startTime = strtotime($startDay." 00:00:00");
            $endTime = strtotime($endDay." 23:59:59");
            $timeLabel =  [
                "start_time" => $startTime,
                "end_time" => $endTime,
                "time_label" => $timeLabel,
            ];
            return $timeLabel;
        }

        $targetDay = $startDay;
        while ($targetDay != $endDay){
            array_push($timeLabel,$targetDay);
            $targetDay = date($dateFormat,strtotime("$targetDay +1 day"));
        }

        array_push($timeLabel,$endDay);

        //增加
        $startTime = strtotime($startDay." 00:00:00");
        $endTime = strtotime($endDay." 23:59:59");
        $timeLabel =  [
            "start_time" => $startTime,
            "end_time" => $endTime,
            "time_label" => $timeLabel,
        ];
        return $timeLabel;
    }

    /**
     * 根據日期獲取本月的開始時間和結束時間
     * @param $date   Y-m    2017-10
     * @return array
     */
    public static function getMonthDaysByDate($date) {
        $data = [];
        $timestamp = strtotime( $date );
        $data["start_time"] = date( "Y-m-01 00:00:00", $timestamp );
        $mdays = date( "t", $timestamp );
        $data["end_time"] = date( "Y-m-" . $mdays . " 23:59:59", $timestamp );
        return $data;
    }

    /**
     * 獲取兩個月份之間連續的月份
     * @param $start
     * @param $end
     * @return array
     */
    public static function  prDates($start, $end) { // 兩個日期之間的所有日期
        $time_start = strtotime($start); // 自動為00:00:00 時分秒 兩個時間之間的年和月份
        $time_end = strtotime($end);
        $monarr[] = $start; // 當前月;
        while( ($time_start = strtotime("+1 month", $time_start)) <= $time_end){
            array_push($monarr,date("Y-m", $time_start));// 取得遞增月
        }
        return $monarr;
    }


    /**
     * 時間友好型提示風格化(即微博中的XXX小時前、昨天等等)
     * 即微博中的 XXX 小時前、昨天等等, 時間超過 $time_limit 后返回按 out_format 的設定風格化時間戳
     * @param  int
     * @param  int
     * @param  string
     * @param  array
     * @param  int
     * @return string
     */
    public static function getFriendlyTime($timestamp, $timeLimit = 604800, $out_format = "Y/m/d", $formats = null, $now = null){
        /*if (get_setting("time_style") == "N")
        {
            return date($out_format, $timestamp);
        }*/

        if (!$timestamp)
        {
            return false;
        }

        if ($formats == null)
        {
            $formats = [
                "YEAR" =>"%s 年前",
                "MONTH" => "%s 月前",
                "DAY" => "%s 天前",
                "HOUR" => "%s 小時前",
                "MINUTE" => "%s 分鐘前",
                "SECOND" => "%s 秒前"
            ];
        }

        $now = $now == null ? time() : $now;
        $seconds = $now - $timestamp;

        if ($seconds == 0)
        {
            $seconds = 1;
        }

        if (!$timeLimit OR $seconds > $timeLimit)
        {
            return date($out_format, $timestamp);
        }

        $minutes = floor($seconds / 60);
        $hours = floor($minutes / 60);
        $days = floor($hours / 24);
        $months = floor($days / 30);
        $years = floor($months / 12);

        if ($years > 0)
        {
            $diffFormat = "YEAR";
        }
        else
        {
            if ($months > 0)
            {
                $diffFormat = "MONTH";
            }
            else
            {
                if ($days > 0)
                {
                    $diffFormat = "DAY";
                }
                else
                {
                    if ($hours > 0)
                    {
                        $diffFormat = "HOUR";
                    }
                    else
                    {
                        $diffFormat = ($minutes > 0) ? "MINUTE" : "SECOND";
                    }
                }
            }
        }

        $dateDiff = null;

        switch ($diffFormat)
        {
            case "YEAR" :
                $dateDiff = sprintf($formats[$diffFormat], $years);
                break;
            case "MONTH" :
                $dateDiff = sprintf($formats[$diffFormat], $months);
                break;
            case "DAY" :
                $dateDiff = sprintf($formats[$diffFormat], $days);
                break;
            case "HOUR" :
                $dateDiff = sprintf($formats[$diffFormat], $hours);
                break;
            case "MINUTE" :
                $dateDiff = sprintf($formats[$diffFormat], $minutes);
                break;
            case "SECOND" :
                $dateDiff = sprintf($formats[$diffFormat], $seconds);
                break;
        }

        return $dateDiff;
    }


    /**
     * 獲取星期幾
     * @param $date
     * @return
     */
    public static function getWeekDay($date) {
        //強制轉換日期格式
        $dateStr=date("Y-m-d",strtotime($date));
        //封裝成數組
        $arr=explode("-", $dateStr);
        //參數賦值
        //年
        $year=$arr[0];

        //月,輸出2位整型,不夠2位右對齊
        $month=sprintf("%02d",$arr[1]);
        //日,輸出2位整型,不夠2位右對齊
        $day=sprintf("%02d",$arr[2]);

        //時分秒默認賦值為0;
        $hour = $minute = $second = 0;

        //轉換成時間戳
        $strap = mktime($hour,$minute,$second,$month,$day,$year);

        //獲取數字型星期幾
        $numberWk=date("w",$strap);

        //自定義星期數組
        $weekArr=array(7,1,2,3,4,5,6);

        //獲取數字對應的星期
        return $weekArr[$numberWk];
    }

    /**
     * 獲取指定日期前后相同時間天數的范圍時間
     * @param int $dayDiff
     * @param string $day
     * @param string $dateFormat
     * @return array
     */
    public static function getPointDaySameRangeContinuesTime($dayDiff = 0,$day = "", $dateFormat = "Y-m-d") {
        $day = $day?$day:date($dateFormat);
        $startTime = date($dateFormat,strtotime("$day -$dayDiff day"));
        $endTime = date($dateFormat,strtotime("$day +$dayDiff day"));
        $result = self::getContinuesDayByRange($startTime,$endTime,$dateFormat = "Y-m-d");
        return $result;
    }

    /**
     * 獲取兩個日期之間相差的天數
     * @param string $day1 第一個日期,格式為Y-m-d
     * @param string $day2 第二個日期,格式為Y-m-d
     * @return integer
     */
    public static function getDiffBetweenTwoDays($day1, $day2) {
        $second1 = strtotime($day1);
        $second2 = strtotime($day2);
        if ($second1 < $second2) {
            $tmp = $second2;
            $second2 = $second1;
            $second1 = $tmp;
        }
        return ($second1 - $second2) / 86400;
    }

    /**
     * 根據日期和相差的天數獲取結束的天數
     * @param $day
     * @param $diffDay
     * @param bool $isBefore
     * @return false|string
     */
    public static function getEndDayByDayAndDiff($day, $diffDay, $isBefore = false) {
        $operator = $isBefore ? "-" : "+";
        $endDay = date("Y-m-d",strtotime("$day $operator $diffDay day"));
        return $endDay;
    }

    /**
     * 根據時間戳返回日期型時間戳
     * @param $time
     * @return int
     */
    public static function dateTime($time) {
        return strtotime(date("Y-m-d", $time));
    }

    /**
     * @param $num
     * @return string
     */
    public static function getFriendlyNumber($num) {
        if ($num >= 10000) {
            $num = round($num / 10000 ,1)  ."萬";
        } else {
            $num = $num;
        }
        return $num;
    }

    /**
     * 判斷兩個時間是否同一天
     * @param string $date1 Y-m-d
     * @param string $date2 Y-m-d
     * @return bool
     */
    public static function isSameDay($date1, $date2) {
        $day1 = self::dateTime(strtotime($date1)) ;
        $day2 = self::dateTime(strtotime($date2));
        return $day1 == $day2;
    }


    /**
     * 轉換秒鐘為分鐘
     * @param $seconds
     * @return string
     */
    public static function convertSecondToTime($seconds) {
        $reminded = strval($seconds % 60);
        $minute = strval(($seconds - $reminded) / 60);
        if(strlen($minute)<2){
            $minute = "0".$minute;
        }
        if(strlen($reminded)<2){
            $reminded = "0".$reminded;
        }
        $time = $minute.":".$reminded;
        return $time;
    }

    /**
     * 獲取時間的毫秒數
     * @return float
     */
    public static function millisecond() {
        list($msec, $sec) = explode(" ", microtime());
        return (float)sprintf("%.0f", (floatval($msec) + floatval($sec)) * 1000);
    }
}

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/29854.html

相關文章

  • PHP生成器

    摘要:它最簡單的調用形式看起來像一個申明,不同之處在于普通會返回值并終止函數的執行,而會返回一個值給循環調用此生成器的代碼并且只是暫停執行生成器函數。 0x01 寫在前面 本文主要介紹: Generator的簡單用法。 Generator的底層實現。 本文比較長,可能會耗費你比較多的時間。如果你比較了解Generator的用法,僅想了解底層實現,可以直接跳到底層實現部分。 本文分析的PH...

    LMou 評論0 收藏0
  • PHP應用性能優化指南

    摘要:怎樣才算是高性能的應用性能和速度不是一對同義詞。紅線表示針對速度進行了優化的腳本,藍線是可擴展性優先的腳本。將任何這些功能置于循環中可能會導致性能問題。完整的代碼檢測評估雖然可能很耗時,但它可以為你提供有關應用程序性能的深入信息。 showImg(https://segmentfault.com/img/bVNxDn?w=900&h=500);程序員都喜歡最新的PHP 7,因為它使PH...

    EddieChan 評論0 收藏0
  • 成為一個PHP專家:缺失環節

    摘要:為了成為一個專家,他必須先成為中級者。它非常適合于急于求成或者沒有太多技術的人,但掌握絕對無法使你成為一個專業的開發者它使用意大利面條式的編碼,教你的是不合適的設計原則。 這一篇文章是Becoming a PHP Professional系列 4 篇博文中的第 1 篇。 當瀏覽各類與PHP相關的博客時,比如Quora上的問題,谷歌群組,簡訊和雜志,我經常注意到技能的等級分化。問題都類...

    cooxer 評論0 收藏0
  • PHP實現微信小程序支付幫助

    摘要:背景事先準備工作申請一個小程序,并開通微信支付,詳細見微信小程序支付業務說明仔細查閱微信支付官方文檔,詳細見微信支付開發者文檔仔細閱讀微信支付統一下單接口仔細閱讀支付結果通知接口整理并在商戶平臺設置好相應的回掉地址,比如服務端編寫兩個接口微 背景 事先準備工作 申請一個小程序,并開通微信支付,詳細見:微信小程序支付業務說明 仔細查閱微信支付官方文檔,詳細見: 微信支付開發者文檔 ...

    mcterry 評論0 收藏0
  • 一個 16年畢業生所經歷 PHP 面試

    摘要:正確做法是給加索引,還有聯合索引,并不能避免全表掃描。 前言:有收獲的話請加顆小星星,沒有收獲的話可以 反對 沒有幫助 舉報三連 有心的同學應該會看到我這個noteBook下面的其它知識,希望對你們有些許幫助。 本文地址 時間點:2017-11 一個16年畢業生所經歷的php面試 一、什么是面試 二、面試準備 1. 問:什么時候開始準備? 2. 問:怎么準備? 三、面試...

    dabai 評論0 收藏0

發表評論

0條評論

ky0ncheng

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<