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


相关文章

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

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

下载

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

热门AI工具

更多
DeepSeek
DeepSeek

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

豆包大模型
豆包大模型

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

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

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

文心一言
文心一言

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

讯飞写作
讯飞写作

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

即梦AI
即梦AI

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

ChatGPT
ChatGPT

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

相关专题

更多
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

616

2026.02.13

微博网页版主页入口与登录指南_官方网页端快速访问方法
微博网页版主页入口与登录指南_官方网页端快速访问方法

本专题系统整理微博网页版官方入口及网页端登录方式,涵盖首页直达地址、账号登录流程与常见访问问题说明,帮助用户快速找到微博官网主页,实现便捷、安全的网页端登录与内容浏览体验。

194

2026.02.13

Flutter跨平台开发与状态管理实战
Flutter跨平台开发与状态管理实战

本专题围绕Flutter框架展开,系统讲解跨平台UI构建原理与状态管理方案。内容涵盖Widget生命周期、路由管理、Provider与Bloc状态管理模式、网络请求封装及性能优化技巧。通过实战项目演示,帮助开发者构建流畅、可维护的跨平台移动应用。

91

2026.02.13

TypeScript工程化开发与Vite构建优化实践
TypeScript工程化开发与Vite构建优化实践

本专题面向前端开发者,深入讲解 TypeScript 类型系统与大型项目结构设计方法,并结合 Vite 构建工具优化前端工程化流程。内容包括模块化设计、类型声明管理、代码分割、热更新原理以及构建性能调优。通过完整项目示例,帮助开发者提升代码可维护性与开发效率。

20

2026.02.13

Redis高可用架构与分布式缓存实战
Redis高可用架构与分布式缓存实战

本专题围绕 Redis 在高并发系统中的应用展开,系统讲解主从复制、哨兵机制、Cluster 集群模式及数据分片原理。内容涵盖缓存穿透与雪崩解决方案、分布式锁实现、热点数据优化及持久化策略。通过真实业务场景演示,帮助开发者构建高可用、可扩展的分布式缓存系统。

54

2026.02.13

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

29

2026.02.12

雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法
雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法

本专题系统整理雨课堂网页版官方入口及在线登录方式,涵盖账号登录流程、官方直连入口及平台访问方法说明,帮助师生用户快速进入雨课堂在线教学平台,实现便捷、高效的课程学习与教学管理体验。

15

2026.02.12

豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法
豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法

本专题汇总豆包AI官方网页版入口及在线使用方式,涵盖智能写作工具、图片生成体验入口和官网登录方法,帮助用户快速直达豆包AI平台,高效完成文本创作与AI生图任务,实现便捷智能创作体验。

598

2026.02.12

PostgreSQL性能优化与索引调优实战
PostgreSQL性能优化与索引调优实战

本专题面向后端开发与数据库工程师,深入讲解 PostgreSQL 查询优化原理与索引机制。内容包括执行计划分析、常见索引类型对比、慢查询优化策略、事务隔离级别以及高并发场景下的性能调优技巧。通过实战案例解析,帮助开发者提升数据库响应速度与系统稳定性。

56

2026.02.12

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP自制框架
PHP自制框架

共8课时 | 0.6万人学习

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

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