当前位置: 首页 > news >正文

PHP 操作日期各种转换,常见日期转换,涉及聊天时间转换、涉及日周月年转换、涉及到图表日期转换

日期操作

一、根据日期生成日期数组

/*** 根据指定日期生成日期数组* @param $start_time 开始时间* @param $end_time   结束时间* @return array     返回数组结果*/
function createDateArr($start_time, $end_time)
{$open_start_time = $start_time;$open_end_time = $end_time;$stimestamp = strtotime($open_start_time);$etimestamp = strtotime($open_end_time);// 计算日期段内有多少天$days = ($etimestamp - $stimestamp) / 86400 + 1;// 保存每天日期$arr = [];for ($i = 0; $i < $days; $i++) {$arr[] = date('Y-m-d', $stimestamp + (86400 * $i));}return $arr;
}
//调用示例
$start_time='2024-05-12';
$end_time='2024-05-15';
$data=createDateArr($start_time,$end_time);
//结果
Array
([0] => 2024-05-12[1] => 2024-05-13[2] => 2024-05-14[3] => 2024-05-15
)

二、根据指定日期获取月份数组

/*** 根据指定日期生成月份数组* @param $startDate* @param $endDate* @return array* @throws Exception*/
function generateMonthlyArray($startDate, $endDate) {$start = new DateTime($startDate);$end = new DateTime($endDate);$end->modify('last day of this month');$interval = new DateInterval('P1M');$period = new DatePeriod($start, $interval, $end);$monthlyArray = array();foreach ($period as $month) {$monthlyArray[] = $month->format('Y-m');}return $monthlyArray;
}
//调用示例
$start_time='2024-05-12';
$end_time='2024-12-15';
$data=generateMonthlyArray($start_time,$end_time);
//结果
Array
([0] => 2024-05[1] => 2024-06[2] => 2024-07[3] => 2024-08[4] => 2024-09[5] => 2024-10
)

三、根据指定时间戳返回一周之内的数组数据

/*** 返回指定时间戳一周之内的数组数据* @param string $time 需要转换的时间戳* @param string $format 返回日期格式* @return array*/
function get_week($time = '', $format = 'Y-m-d')
{$time = $time != '' ? $time : time();//获取当前周几$week = date('w', $time);$date = [];for ($i = 1; $i <= 7; $i++) {$date[$i] = date($format, strtotime('+' . $i - $week . ' days', $time));}return $date;
}
//调用示例
$time=strtotime('2024-05-07');
$format='Y/m/d';
$data=get_week($time,$format);
//结果
Array
([1] => 2024/05/06[2] => 2024/05/07[3] => 2024/05/08[4] => 2024/05/09[5] => 2024/05/10[6] => 2024/05/11[7] => 2024/05/12
)

四、将指定日期转化为星期几

/*** 将指定日期转化成星期几* @param $date* @return string*/
function get_week($date)
{header("Content-type: text/html; charset=utf-8");//强制转换日期格式$date_str = date('Y-m-d', strtotime($date));//封装成数组$arr = explode("-", $date_str);//参数赋值//年$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);//获取数字型星期几$number_wk = date("w", $strap);//自定义星期数组$weekArr = array("星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六");//获取数字对应的星期return $weekArr[$number_wk];
}
//调用示例
$time='2024-05-07';
$data=get_week($time);
//结果
星期二

五、计算俩个日期之差

/*** 计算俩个日期之差* @param $day1  开始日期* @param $day2  结束日期* @return float|int 返回天数*/
function diffBetweenTwoDays($day1, $day2)
{$second1 = strtotime($day1);$second2 = strtotime($day2);if ($second1 < $second2) {$tmp = $second2;$second2 = $second1;$second1 = $tmp;}return ($second1 - $second2) / 86400;
}
//调用示例
$start_time='2024-05-07';
$end_time='2024-05-08';
$data=diffBetweenTwoDays($start_time,$end_time);
//结果
1

六、根据将秒数转换成年月日时分秒

/*** 根据将秒数转换成年月日时分秒* @param $time* @return string*/
function GEtTime($time){if(is_numeric($time)){$value = array("years" => 0, "days" => 0, "hours" => 0,"minutes" => 0, "seconds" => 0,);if($time >= 31556926){$value["years"] = floor($time/31556926);$time = ($time%31556926);}if($time >= 86400){$value["days"] = floor($time/86400);$time = ($time%86400);}if($time >= 3600){$value["hours"] = floor($time/3600);$time = ($time%3600);}if($time >= 60){$value["minutes"] = floor($time/60);$time = ($time%60);}$value["seconds"] = floor($time);$n=$t=$h=$m=$s='';if ($value["years"]>0){$n=$value["years"]."年";}if ($value["days"]>0){$t=$value["days"]."天";}if ($value["hours"]>0){$h=$value["hours"]."小时";}if ($value["minutes"]>0){$m=$value["minutes"]."分";}if ($value["seconds"]>0){$s=$value["seconds"]."秒";}$time2=$n.$t.$h.$m.$s;return $time2;}else{return '时间格式不正确';}
}
//调用示例
$time=32556926;
$time=80;
$data=GEtTime($time);
//结果
11113小时4640120

七、获取今日当月今年日期

//注意 空格不能去掉
//获取今日日期0点-23.59
$time = date('Y-m-d', time());
$start_time=$time.' 00:00:00';
$end_time = $time." 23:59:59";
//获取当月日期
$start_time = date('Y-m-01', time()) . ' 00:00:00';
$end_time = date('Y-m-d', strtotime("$start_time+1 month -1 day")) . ' 23:59:59';
//获取今年日期
$start_time = date('Y-01-01', time());
$end_time = date('Y-m-d', strtotime("$start_time+1 year -1 day"));

时间转换

一、将日期转换成距今多长时间

/*** 将日期转换成距今多长时间* @param $show_time 日期时间* @param $now_time  当前时间* @return false|int|string*/
function time_distance($show_time)
{if (!$show_time) {return '';}$show_time = (!is_numeric($show_time)) ? strtotime($show_time) : $show_time;$now_time = time();$dur = $now_time - $show_time;if ($dur < 0) {return $show_time;} else {if ($dur < 10) {return '刚刚';} else if ($dur < 60) {return $dur . '秒前';} else {if ($dur < 3600) {return floor($dur / 60) . '分钟前';} else {if ($dur < 86400) {return floor($dur / 3600) . '小时前';} else {return date_change($show_time);}}}}
}//转变时间
function date_change($date)
{if (!$date) {return '';}$date = (!is_numeric($date)) ? strtotime($date) : $date;if (date('Ymd', $date) == date('Ymd', time())) {return date('H:i', $date);} else if (date('Ymd', $date) == date('Ymd', strtotime('-1 day'))) {return "昨天 " . date('H:i', $date);} else if (date('Y', $date) == date('Y', time())) {return date('m月d日', $date);} else {return date('Y年m月d日', $date);}
}
//示例
$start_time='2024-05-31 16:23:56';
$data= time_distance($start_time);
//结果
55分钟前
1小时前

相关文章:

  • 【TB作品】MSP430F5529单片机,温控小风扇,DS18B20温度读取,PWM风扇
  • 【Git】在错误分支上开发了怎么办
  • WIFI 万[néng]钥匙 v5.0.10/v4.9.80 SVIP版!
  • 直播分享|深入解析ts-morph:通过注释生成类型文档
  • 102.网络游戏逆向分析与漏洞攻防-ui界面的设计-反隐身功能的界面设计与实现(有不使用MFC生成,自己手写代码创建复选框与事件的例子)
  • imx6ull - 制作烧录SD卡
  • 特征工程技巧—Bert
  • ResizeObserver监听画布尺寸改变动态渲染echarts
  • Lua 基础 04 模块
  • Linux 系统安全及应用
  • FFmpeg解复用器(解封装)简单测试【2】
  • 每日一练——分糖果2
  • 【Go语言精进之路】构建高效Go程序:零值可用、使用复合字面值作为初值构造器
  • CAPL如何发送一条UDP报文
  • 独立游戏开发的 6 个步骤
  • 10个最佳ES6特性 ES7与ES8的特性
  • Angular2开发踩坑系列-生产环境编译
  • C# 免费离线人脸识别 2.0 Demo
  • Electron入门介绍
  • EventListener原理
  • Linux中的硬链接与软链接
  • Sass Day-01
  • TypeScript迭代器
  • Vue.js源码(2):初探List Rendering
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • 警报:线上事故之CountDownLatch的威力
  • 离散点最小(凸)包围边界查找
  • 排序算法之--选择排序
  • 前端存储 - localStorage
  • 网络应用优化——时延与带宽
  • 微服务框架lagom
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • # Panda3d 碰撞检测系统介绍
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • # 达梦数据库知识点
  • #### go map 底层结构 ####
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • (09)Hive——CTE 公共表达式
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (笔记)M1使用hombrew安装qemu
  • (苍穹外卖)day03菜品管理
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (回溯) LeetCode 40. 组合总和II
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (转)Sublime Text3配置Lua运行环境
  • (转)使用VMware vSphere标准交换机设置网络连接
  • **Java有哪些悲观锁的实现_乐观锁、悲观锁、Redis分布式锁和Zookeeper分布式锁的实现以及流程原理...
  • .net core docker部署教程和细节问题