0

0

php时间日期工具类的实现代码

php中文网

php中文网

发布时间:2016-07-25 08:56:04

|

1429人浏览过

|

来源于php中文网

原创

  1. /**
  2. * 功能:php时间与日期工具类
  3. * 编辑:bbs.it-home.org
  4. */
  5. DateTimeUtils::addDate('2013-12-01',1,'y');
  6. DateTimeUtils::getWeekDay('2013/10/01','/');
  7. DateTimeUtils::isLeapYear('2013');
  8. DateTimeUtils::timeFromNow(strtotime("2013-10-26 14:15:13"));
  9. class DateTimeUtils {
  10. /**
  11. * Checks for leap year, returns true if it is. No 2-digit year check. Also
  12. * handles julian calendar correctly.
  13. * @param integer $year year to check
  14. * @return boolean true if is leap year
  15. */
  16. public static function isLeapYear($year)
  17. {
  18. $year = self::digitCheck($year);
  19. if ($year % 4 != 0)
  20. return false;
  21. if ($year % 400 == 0)
  22. return true;
  23. // if gregorian calendar (>1582), century not-divisible by 400 is not leap
  24. else if ($year > 1582 && $year % 100 == 0)
  25. return false;
  26. return true;
  27. }
  28. /**
  29. * Fix 2-digit years. Works for any century.
  30. * Assumes that if 2-digit is more than 30 years in future, then previous century.
  31. * @param integer $y year
  32. * @return integer change two digit year into multiple digits
  33. */
  34. protected static function digitCheck($y)
  35. {
  36. if ($y $yr = (integer) date("Y");
  37. $century = (integer) ($yr /100);
  38. if ($yr%100 > 50) {
  39. $c1 = $century + 1;
  40. $c0 = $century;
  41. } else {
  42. $c1 = $century;
  43. $c0 = $century - 1;
  44. }
  45. $c1 *= 100;
  46. // if 2-digit year is less than 30 years in future, set it to this century
  47. // otherwise if more than 30 years in future, then we set 2-digit year to the prev century.
  48. if (($y + $c1) else $y = $y + $c0*100;
  49. }
  50. return $y;
  51. }
  52. /**
  53. * Returns 4-digit representation of the year.
  54. * @param integer $y year
  55. * @return integer 4-digit representation of the year
  56. */
  57. public static function get4DigitYear($y)
  58. {
  59. return self::digitCheck($y);
  60. }
  61. /**
  62. * Checks to see if the year, month, day are valid combination.
  63. * @param integer $y year
  64. * @param integer $m month
  65. * @param integer $d day
  66. * @return boolean true if valid date, semantic check only.
  67. */
  68. public static function isValidDate($y,$m,$d)
  69. {
  70. return checkdate($m, $d, $y);
  71. }
  72. public static function checkDate($date, $separator = "-") { //检查日期是否合法日期
  73. $dateArr = explode ($separator, $date);
  74. return self::isValidDate ($dateArr[0], $dateArr[1], $dateArr[2]);
  75. }
  76. /**
  77. * Checks to see if the hour, minute and second are valid.
  78. * @param integer $h hour
  79. * @param integer $m minute
  80. * @param integer $s second
  81. * @param boolean $hs24 whether the hours should be 0 through 23 (default) or 1 through 12.
  82. * @return boolean true if valid date, semantic check only.
  83. * @since 1.0.5
  84. */
  85. public static function isValidTime($h,$m,$s,$hs24=true)
  86. {
  87. if($hs24 && ($h 23) || !$hs24 && ($h 12)) return false;
  88. if($m > 59 || $m if($s > 59 || $s return true;
  89. }
  90. public static function checkTime($time, $separator = ":") { //检查时间是否合法时间
  91. $timeArr = explode($separator, $time);
  92. return self::isValidTime($timeArr[0], $timeArr[1],$timeArr[2]);
  93. }
  94. public static function addDate($date, $int, $unit = "d") { //日期的增加
  95. $value = array('y'=>'', 'm'=>'', 'd'=>'');
  96. $dateArr = explode ( "-", $date);
  97. if(array_key_exists($unit, $value)){
  98. $value[$unit] = $int;
  99. }else{
  100. return false;
  101. }
  102. return date ("Y-m-d", mktime (0, 0, 0, $dateArr[1] + $value['m'], $dateArr[2] + $value['d'], $dateArr[0] +$value['y']));
  103. }
  104. public static function addDateTime($date, $int, $unit = "d") { //日期的增加
  105. $value = array('y'=>'', 'm'=>'', 'd'=>'', 'h'=>'', 'i'=>'');
  106. $dateArr = preg_split ( "/-|\s|:/", $date);
  107. if(array_key_exists($unit, $value)){
  108. $value[$unit] = $int;
  109. }else{
  110. return false;
  111. }
  112. return date ("Y-m-d H:i:s", mktime($dateArr[3]+ $value['h'], $dateArr[4]+ $value['i'], $dateArr[5], $dateArr[1] + $value['m'], $dateArr[2] + $value['d'], $dateArr[0] + $value['y']));
  113. }
  114. public static function addDayTimestamp($ntime, $aday) { //取当前时间后几天,天数增加单位为1
  115. $dayst = 3600 * 24;
  116. $oktime = $ntime + ($aday * $dayst);
  117. return $oktime;
  118. }
  119. public static function dateDiff($begin, $end, $unit = "d") { //时间比较函数,返回两个日期相差几秒、几分钟、几小时或几天
  120. $diff = strtotime($end) - strtotime($begin);
  121. switch($unit)
  122. {
  123. case "y": $retval = bcdiv($diff, (60 * 60 * 24 * 365)); break;
  124. case "m": $retval = bcdiv($diff, (60 * 60 * 24 * 30)); break;
  125. case "w": $retval = bcdiv($diff, (60 * 60 * 24 * 7)); break;
  126. case "d": $retval = bcdiv($diff, (60 * 60 * 24)); break;
  127. case "h": $retval = bcdiv($diff, (60 * 60)); break;
  128. case "i": $retval = bcdiv($diff, 60); break;
  129. case "s": $retval = $diff; break;
  130. }
  131. return $retval;
  132. }
  133. public static function getWeekDay($date, $separator = "-") { //计算出给出的日期是星期几
  134. $dateArr = explode ($separator, $date);
  135. return date ("w", mktime ( 0, 0, 0, $dateArr[1], $dateArr[2], $dateArr[0]));
  136. }
  137. public static function timeFromNow($dateline) { //让日期显示为:XX天XX年以前
  138. if(empty($dateline)) return false;
  139. $seconds = time() - $dateline;
  140. if($seconds return "1分钟前";
  141. }elseif($seconds return floor($seconds/60)."分钟前";
  142. }elseif($seconds return floor($seconds/3600)."小时前";
  143. }elseif($seconds return date("昨天 H:i", $dateline)."";
  144. }else{
  145. return date('Y-m-d', $dateline);
  146. }
  147. }
  148. public static function transDateToChs($date) {
  149. if (empty ($date)) return '今日';
  150. date_default_timezone_set('PRC');
  151. $dates = date ('Y年m月d日', strtotime ($date));
  152. return $dates;
  153. }
  154. // 08/31/2004 => 2004-08-31
  155. public static function TransDateUI($datestr, $type = 'Y-m-d') {
  156. if ($datestr == Null)
  157. return Null;
  158. $target = $datestr;
  159. $arr_date = preg_split ( "/\//", $target);
  160. $monthstr = $arr_date[0];
  161. $daystr = $arr_date[1];
  162. $yearstr = $arr_date[2];
  163. $result = date ($type, mktime (0, 0, 0, $monthstr, $daystr, $yearstr));
  164. return $result;
  165. }
  166. // 12/20/2004 10:55 AM => 2004-12-20 10:55:00
  167. public static function TransDateTimeUI($datestr, $type = 'Y-m-d H:i:s') {
  168. if ($datestr == Null)
  169. return Null;
  170. $target = $datestr;
  171. $arr_date = preg_split ( "/\/|\s|:/", $target);
  172. $monthstr = $arr_date[0];
  173. $daystr = $arr_date[1];
  174. $yearstr = $arr_date[2];
  175. $hourstr = $arr_date[3];
  176. $minutesstr = $arr_date[4];
  177. $result = date ($type, mktime ($hourstr, $minutesstr, 0, $monthstr, $daystr, $yearstr));
  178. return $result;
  179. }
  180. }
  181. ?>
复制代码


PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

26

2026.03.13

Python异步编程与Asyncio高并发应用实践
Python异步编程与Asyncio高并发应用实践

本专题围绕 Python 异步编程模型展开,深入讲解 Asyncio 框架的核心原理与应用实践。内容包括事件循环机制、协程任务调度、异步 IO 处理以及并发任务管理策略。通过构建高并发网络请求与异步数据处理案例,帮助开发者掌握 Python 在高并发场景中的高效开发方法,并提升系统资源利用率与整体运行性能。

46

2026.03.12

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

178

2026.03.11

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

51

2026.03.10

Kotlin Android模块化架构与组件化开发实践
Kotlin Android模块化架构与组件化开发实践

本专题围绕 Kotlin 在 Android 应用开发中的架构实践展开,重点讲解模块化设计与组件化开发的实现思路。内容包括项目模块拆分策略、公共组件封装、依赖管理优化、路由通信机制以及大型项目的工程化管理方法。通过真实项目案例分析,帮助开发者构建结构清晰、易扩展且维护成本低的 Android 应用架构体系,提升团队协作效率与项目迭代速度。

92

2026.03.09

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

102

2026.03.06

Rust内存安全机制与所有权模型深度实践
Rust内存安全机制与所有权模型深度实践

本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

227

2026.03.05

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

532

2026.03.04

AI安装教程大全
AI安装教程大全

2026最全AI工具安装教程专题:包含各版本AI绘图、AI视频、智能办公软件的本地化部署手册。全篇零基础友好,附带最新模型下载地址、一键安装脚本及常见报错修复方案。每日更新,收藏这一篇就够了,让AI安装不再报错!

171

2026.03.04

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号