摘要:背景工作的過程中經(jīng)常會(huì)遇到各種時(shí)間類的操作,因此封裝了一個(gè)幫助工具類,提高代碼的復(fù)用率主要功能根據(jù)相差的天數(shù)獲取連續(xù)的時(shí)間段根據(jù)相差的天數(shù)獲取所有連續(xù)的時(shí)間段轉(zhuǎn)化查詢條件根據(jù)兩個(gè)日期獲取連續(xù)的時(shí)間段根據(jù)開始和結(jié)束時(shí)間獲取所
背景
工作的過程中經(jīng)常會(huì)遇到各種時(shí)間類的操作,因此封裝了一個(gè)幫助工具類,提高代碼的復(fù)用率
主要功能 根據(jù)相差的天數(shù)獲取連續(xù)的時(shí)間段/** * 根據(jù)相差的天數(shù)獲取所有連續(xù)的時(shí)間段 * @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); } //轉(zhuǎn)化查詢條件 $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, ]; }根據(jù)兩個(gè)日期獲取連續(xù)的時(shí)間段
/** * 根據(jù)開始和結(jié)束時(shí)間獲取所有連續(xù)的時(shí)間段 * @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; }根據(jù)日期獲取當(dāng)月的開始時(shí)間和結(jié)束時(shí)間
/** * 根據(jù)日期獲取本月的開始時(shí)間和結(jié)束時(shí)間 * @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; }時(shí)間友好格式化風(fēng)格
/** * 時(shí)間友好型提示風(fēng)格化(即微博中的XXX小時(shí)前、昨天等等) * 即微博中的 XXX 小時(shí)前、昨天等等, 時(shí)間超過 $time_limit 后返回按 out_format 的設(shè)定風(fēng)格化時(shí)間戳 * @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 小時(shí)前", "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; }根據(jù)日期獲取是星期幾
/** * 獲取星期幾 * @param $date * @return */ public static function getWeekDay($date) { //強(qiáng)制轉(zhuǎn)換日期格式 $dateStr=date("Y-m-d",strtotime($date)); //封裝成數(shù)組 $arr=explode("-", $dateStr); //參數(shù)賦值 //年 $year=$arr[0]; //月,輸出2位整型,不夠2位右對(duì)齊 $month=sprintf("%02d",$arr[1]); //日,輸出2位整型,不夠2位右對(duì)齊 $day=sprintf("%02d",$arr[2]); //時(shí)分秒默認(rèn)賦值為0; $hour = $minute = $second = 0; //轉(zhuǎn)換成時(shí)間戳 $strap = mktime($hour,$minute,$second,$month,$day,$year); //獲取數(shù)字型星期幾 $numberWk=date("w",$strap); //自定義星期數(shù)組 $weekArr=array(7,1,2,3,4,5,6); //獲取數(shù)字對(duì)應(yīng)的星期 return $weekArr[$numberWk]; }獲取指定日期前后相同時(shí)間天數(shù)的時(shí)間范圍
/** * 獲取指定日期前后相同時(shí)間天數(shù)的范圍時(shí)間 * @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; }獲取兩個(gè)日期之間相差的天數(shù)
/** * 獲取兩個(gè)日期之間相差的天數(shù) * @param string $day1 第一個(gè)日期,格式為Y-m-d * @param string $day2 第二個(gè)日期,格式為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; }根據(jù)指定日期和天數(shù),獲取結(jié)束的日期
/** * 根據(jù)日期和相差的天數(shù)獲取結(jié)束的天數(shù) * @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; }判斷兩個(gè)日期是否為同一天
/** * 判斷兩個(gè)時(shí)間是否同一天 * @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; }轉(zhuǎn)換秒鐘為分鐘
/** * 轉(zhuǎn)換秒鐘為分鐘 * @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; }獲取毫秒數(shù)
/** * 獲取時(shí)間的毫秒數(shù) * @return float */ public static function millisecond() { list($msec, $sec) = explode(" ", microtime()); return (float)sprintf("%.0f", (floatval($msec) + floatval($sec)) * 1000); }附錄:完整的時(shí)間幫助類代碼
$startTime, "end_time" => $endTime, "time_label" => $timeLabel, ]; } /** * 根據(jù)開始和結(jié)束時(shí)間獲取所有連續(xù)的時(shí)間段 * @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; } /** * 根據(jù)日期獲取本月的開始時(shí)間和結(jié)束時(shí)間 * @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; } /** * 獲取兩個(gè)月份之間連續(xù)的月份 * @param $start * @param $end * @return array */ public static function prDates($start, $end) { // 兩個(gè)日期之間的所有日期 $time_start = strtotime($start); // 自動(dòng)為00:00:00 時(shí)分秒 兩個(gè)時(shí)間之間的年和月份 $time_end = strtotime($end); $monarr[] = $start; // 當(dāng)前月; while( ($time_start = strtotime("+1 month", $time_start)) <= $time_end){ array_push($monarr,date("Y-m", $time_start));// 取得遞增月 } return $monarr; } /** * 時(shí)間友好型提示風(fēng)格化(即微博中的XXX小時(shí)前、昨天等等) * 即微博中的 XXX 小時(shí)前、昨天等等, 時(shí)間超過 $time_limit 后返回按 out_format 的設(shè)定風(fēng)格化時(shí)間戳 * @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 小時(shí)前", "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) { //強(qiáng)制轉(zhuǎn)換日期格式 $dateStr=date("Y-m-d",strtotime($date)); //封裝成數(shù)組 $arr=explode("-", $dateStr); //參數(shù)賦值 //年 $year=$arr[0]; //月,輸出2位整型,不夠2位右對(duì)齊 $month=sprintf("%02d",$arr[1]); //日,輸出2位整型,不夠2位右對(duì)齊 $day=sprintf("%02d",$arr[2]); //時(shí)分秒默認(rèn)賦值為0; $hour = $minute = $second = 0; //轉(zhuǎn)換成時(shí)間戳 $strap = mktime($hour,$minute,$second,$month,$day,$year); //獲取數(shù)字型星期幾 $numberWk=date("w",$strap); //自定義星期數(shù)組 $weekArr=array(7,1,2,3,4,5,6); //獲取數(shù)字對(duì)應(yīng)的星期 return $weekArr[$numberWk]; } /** * 獲取指定日期前后相同時(shí)間天數(shù)的范圍時(shí)間 * @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; } /** * 獲取兩個(gè)日期之間相差的天數(shù) * @param string $day1 第一個(gè)日期,格式為Y-m-d * @param string $day2 第二個(gè)日期,格式為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; } /** * 根據(jù)日期和相差的天數(shù)獲取結(jié)束的天數(shù) * @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; } /** * 根據(jù)時(shí)間戳返回日期型時(shí)間戳 * @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; } /** * 判斷兩個(gè)時(shí)間是否同一天 * @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; } /** * 轉(zhuǎn)換秒鐘為分鐘 * @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; } /** * 獲取時(shí)間的毫秒數(shù) * @return float */ public static function millisecond() { list($msec, $sec) = explode(" ", microtime()); return (float)sprintf("%.0f", (floatval($msec) + floatval($sec)) * 1000); } }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/29854.html
摘要:它最簡單的調(diào)用形式看起來像一個(gè)申明,不同之處在于普通會(huì)返回值并終止函數(shù)的執(zhí)行,而會(huì)返回一個(gè)值給循環(huán)調(diào)用此生成器的代碼并且只是暫停執(zhí)行生成器函數(shù)。 0x01 寫在前面 本文主要介紹: Generator的簡單用法。 Generator的底層實(shí)現(xiàn)。 本文比較長,可能會(huì)耗費(fèi)你比較多的時(shí)間。如果你比較了解Generator的用法,僅想了解底層實(shí)現(xiàn),可以直接跳到底層實(shí)現(xiàn)部分。 本文分析的PH...
摘要:怎樣才算是高性能的應(yīng)用性能和速度不是一對(duì)同義詞。紅線表示針對(duì)速度進(jìn)行了優(yōu)化的腳本,藍(lán)線是可擴(kuò)展性優(yōu)先的腳本。將任何這些功能置于循環(huán)中可能會(huì)導(dǎo)致性能問題。完整的代碼檢測(cè)評(píng)估雖然可能很耗時(shí),但它可以為你提供有關(guān)應(yīng)用程序性能的深入信息。 showImg(https://segmentfault.com/img/bVNxDn?w=900&h=500);程序員都喜歡最新的PHP 7,因?yàn)樗筆H...
摘要:為了成為一個(gè)專家,他必須先成為中級(jí)者。它非常適合于急于求成或者沒有太多技術(shù)的人,但掌握絕對(duì)無法使你成為一個(gè)專業(yè)的開發(fā)者它使用意大利面條式的編碼,教你的是不合適的設(shè)計(jì)原則。 這一篇文章是Becoming a PHP Professional系列 4 篇博文中的第 1 篇。 當(dāng)瀏覽各類與PHP相關(guān)的博客時(shí),比如Quora上的問題,谷歌群組,簡訊和雜志,我經(jīng)常注意到技能的等級(jí)分化。問題都類...
摘要:背景事先準(zhǔn)備工作申請(qǐng)一個(gè)小程序,并開通微信支付,詳細(xì)見微信小程序支付業(yè)務(wù)說明仔細(xì)查閱微信支付官方文檔,詳細(xì)見微信支付開發(fā)者文檔仔細(xì)閱讀微信支付統(tǒng)一下單接口仔細(xì)閱讀支付結(jié)果通知接口整理并在商戶平臺(tái)設(shè)置好相應(yīng)的回掉地址,比如服務(wù)端編寫兩個(gè)接口微 背景 事先準(zhǔn)備工作 申請(qǐng)一個(gè)小程序,并開通微信支付,詳細(xì)見:微信小程序支付業(yè)務(wù)說明 仔細(xì)查閱微信支付官方文檔,詳細(xì)見: 微信支付開發(fā)者文檔 ...
摘要:正確做法是給加索引,還有聯(lián)合索引,并不能避免全表掃描。 前言:有收獲的話請(qǐng)加顆小星星,沒有收獲的話可以 反對(duì) 沒有幫助 舉報(bào)三連 有心的同學(xué)應(yīng)該會(huì)看到我這個(gè)noteBook下面的其它知識(shí),希望對(duì)你們有些許幫助。 本文地址 時(shí)間點(diǎn):2017-11 一個(gè)16年畢業(yè)生所經(jīng)歷的php面試 一、什么是面試 二、面試準(zhǔn)備 1. 問:什么時(shí)候開始準(zhǔn)備? 2. 問:怎么準(zhǔn)備? 三、面試...
閱讀 743·2021-11-16 11:44
閱讀 3572·2019-08-26 12:13
閱讀 3263·2019-08-26 10:46
閱讀 2381·2019-08-23 12:37
閱讀 1215·2019-08-22 18:30
閱讀 2558·2019-08-22 17:30
閱讀 1870·2019-08-22 17:26
閱讀 2313·2019-08-22 16:20