php 根据时间排序,接近的时间排在前面,过去的时间排在后面

产品需求,有一个开放日的活动,时间是多选,且一个时间不能超过24小时,不能跨天,不能相等,后台没问题了,接口调取数据的时候麻烦点,因为刚开始时间存的json字段,后面改为添加一个时间表
时间字段有:stime:开始时间,etime:结束时间

// 接收的时间因为前台可以切换月份查看数据
$deta = $this->request->post('deta'); // 2023-12-10
// 转为年月
$dateParam = date('Y-m',strtotime($deta));
$currentMonthStart = $dateParam;
$currentMonthStart = date('Y-m-d 00:00:00', strtotime($currentMonthStart));
$currentMonthEnd = date('Y-m-t 23:59:59', strtotime($currentMonthStart));
// 注释的内容是上一测试的方法
$result = opmodel::alias('a')->join('opendaytime op', 'op.openday_id = a.id', 'left')->where(['a.switch'=>1,'op.stime'=>['>',$currentMonthStart],'op.etime'=>['<',$currentMonthEnd]])// 将 GROUP_CONCAT(DATE_FORMAT(op.stime, "%Y-%m-%d"))转换为年月日
//            ->field('a.*,GROUP_CONCAT(op.id) as opid,CONCAT("[", GROUP_CONCAT(JSON_OBJECT( "etime", DATE_FORMAT(op.etime, "%Y-%m-%d %H:%i:%s"),"stime", DATE_FORMAT(op.stime, "%Y-%m-%d %H:%i:%s"))), "]") as optime')->field('a.*,op.id as opid,op.stime,op.etime,op.openday_id')
//            ->group('a.id')->order('stime')
//            ->fetchSql()->paginate($limit,$pages)->toArray();
// 根据openday_id将相同的数据归为一个数组$newData = [];foreach ($result['data'] as $item) {$opendayId = $item['openday_id'];if (!isset($newData[$opendayId])) {$newData[$opendayId] = ['id'=> $item['id'],'openday_id' => $opendayId,'name' => $item['name'],'activityimage' => $item['activityimage'],'school_id'=> $item['school_id'],'activityaddress'=> $item['activityaddress'],'quota'=> $item['quota'],'weigh'=> $item['weigh'],'opid'=> $item['opid'],'optime' => [],];}$newData[$opendayId]['optime'][] = ['stime' => $item['stime'],'etime' => $item['etime'],];}// 当前时间$currentTimestamp = strtotime(date('Y-m-d 00:00:00'));// 循环处理时间,添加未来时间futuretime和过去时间pasttimeforeach ($newData as &$activity) {$activity['futuretime'] = ''; // 未来时间$activity['pasttime'] = []; // 过去时间foreach ($activity['optime'] as &$optime) {$startTime = strtotime($optime['stime']);if ($startTime < strtotime('+1 week', $currentTimestamp) && $startTime >= $currentTimestamp ) {if (empty($activity['futuretime'])) {$activity['futuretime'] = $startTime;}}else{$activity['pasttime'][] = $startTime;}// $ymd 暂未使用$ymd = date('Y-m-d', strtotime($optime['stime']));$_ymd = date('Y-m', strtotime($optime['stime']));$hm = date('H:i', strtotime($optime['stime'])) .'-'.date('H:i', strtotime($optime['etime']));if (!$activity['currentmonth']) {$activity['currentmonth'] = explode('-', $_ymd);}// 特殊需求 展示时间$activity['ymdhm'][] = ['ymd' => $_ymd,'hm' => $hm,];}// 前台点击查看的月份$activity['cktime'] = date('Y-m',strtotime($activity['optime'][0]['stime']));// 统计当前月份的场次$activity['counttime'] = count($activity['ymdhm']);$activity['school_name'] = $activity['school_id'];// 可去可不去unset($activity['openjson']);// 如果futuretime没有数据,就将最后一个日期放入if (empty($activity['futuretime'])) {$lastOptime = end($activity['optime']);$lastStartTime = strtotime($lastOptime['stime']);$activity['futuretime'] = $lastStartTime;}}// 根据字段排序usort($newData, function($a, $b) use ($currentTimestamp) {if ($a['futuretime'] < $currentTimestamp) {return 1;} elseif ($b['futuretime'] < $currentTimestamp) {return -1;} else {return $a['futuretime'] - $b['futuretime'];}});$result['data'] = $newData;

打印结果

array:6 [0 => array:17 ["id" => 26"openday_id" => 26"name" => "活动02""activityimage" => "活动图片""school_id" => "学校名称""activityaddress" => "地址""quota" => "10000""weigh" => 26"opid" => 30"optime" => array:2 [0 => array:3 ["stime" => "2023-12-13 09:00:00""etime" => "2023-12-13 17:00:00"]1 => array:3 ["stime" => "2023-12-14 09:00:00""etime" => "2023-12-14 17:00:00"]]"futuretime" => 1702515600"pasttime" => array:1 [0 => 1702429200]"currentmonth" => array:2 [0 => "2023"1 => "12"]"ymdhm" => array:2 [0 => array:2 ["ymd" => "2023-12""hm" => "09:00-17:00"]1 => array:2 ["ymd" => "2023-12""hm" => "09:00-17:00"]]"cktime" => "2023-12""counttime" => 2"school_name" => "学校名称"]1 => array:17 ["id" => 27"openday_id" => 27"name" => "活动03""activityimage" => "活动图片""school_id" => "学校名称""activityaddress" => "地址""quota" => "10000""weigh" => 27"opid" => 32"optime" => array:3 [0 => array:3 ["stime" => "2023-12-15 09:00:00""etime" => "2023-12-15 00:00:00"]1 => array:3 ["stime" => "2023-12-16 09:00:00""etime" => "2023-12-16 17:00:00"]2 => array:3 ["stime" => "2023-12-17 09:00:00""etime" => "2023-12-17 17:00:00"]]"futuretime" => 1702602000"pasttime" => []"currentmonth" => array:2 [0 => "2023"1 => "12"]"ymdhm" => array:3 [0 => array:2 ["ymd" => "2023-12""hm" => "09:00-00:00"]1 => array:2 ["ymd" => "2023-12""hm" => "09:00-17:00"]2 => array:2 ["ymd" => "2023-12""hm" => "09:00-17:00"]]"cktime" => "2023-12""counttime" => 3"school_name" => "学校名称"]2 => array:17 ["id" => 29"openday_id" => 29"name" => "活动05""activityimage" => "活动图片""school_id" => "学校名称""activityaddress" => "地址""quota" => "10000""weigh" => 29"opid" => 36"optime" => array:1 [0 => array:3 ["stime" => "2023-12-18 09:00:00""etime" => "2023-12-18 17:00:00"]]"futuretime" => 1702861200"pasttime" => []"currentmonth" => array:2 [0 => "2023"1 => "12"]"ymdhm" => array:1 [0 => array:2 ["ymd" => "2023-12""hm" => "09:00-17:00"]]"cktime" => "2023-12""counttime" => 1"school_name" => "学校名称"]3 => & array:17 ["id" => 30"openday_id" => 30"name" => "活动06""activityimage" => "活动图片""school_id" => "学校名称""activityaddress" => "地址""quota" => "10000""weigh" => 30"opid" => 37"optime" => array:1 [0 => & array:3 ["stime" => "2023-12-19 09:00:00""etime" => "2023-12-19 17:00:00"]]"futuretime" => 1702947600"pasttime" => []"currentmonth" => array:2 [0 => "2023"1 => "12"]"ymdhm" => array:1 [0 => array:2 ["ymd" => "2023-12""hm" => "09:00-17:00"]]"cktime" => "2023-12""counttime" => 1"school_name" => "学校名称"]4 => array:17 ["id" => 25"openday_id" => 25"name" => "活动01""activityimage" => "活动图片""school_id" => "学校名称""activityaddress" => "地址""quota" => "10000""weigh" => 25"opid" => 29"optime" => array:1 [0 => array:3 ["stime" => "2023-12-13 09:00:00""etime" => "2023-12-13 17:00:00"]]"futuretime" => 1702429200"pasttime" => array:1 [0 => 1702429200]"currentmonth" => array:2 [0 => "2023"1 => "12"]"ymdhm" => array:1 [0 => array:2 ["ymd" => "2023-12""hm" => "09:00-17:00"]]"cktime" => "2023-12""counttime" => 1"school_name" => "学校名称"]5 => array:17 ["id" => 28"openday_id" => 28"name" => "测试活动04-测试已过时间""activityimage" => "活动图片""school_id" => "学校名称""activityaddress" => "地址""quota" => "10000""weigh" => 28"opid" => 35"optime" => array:2 [0 => array:3 ["stime" => "2023-12-08 09:00:00""etime" => "2023-12-08 17:00:00"]1 => array:3 ["stime" => "2023-12-09 09:00:00""etime" => "2023-12-09 17:00:00"]]"futuretime" => 1702083600"pasttime" => array:2 [0 => 17019972001 => 1702083600]"currentmonth" => array:2 [0 => "2023"1 => "12"]"ymdhm" => array:2 [0 => array:2 ["ymd" => "2023-12""hm" => "09:00-17:00"]1 => array:2 ["ymd" => "2023-12""hm" => "09:00-17:00"]]"cktime" => "2023-12""counttime" => 2"school_name" => "学校名称"]
]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/221975.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【九】python模板方法模式

9.1 模板方法模式概述 模板方法模式是一种行为设计模式&#xff0c;它使用一个抽象的基类定义了一个操作中的算法的骨架&#xff0c;而将一些步骤的实现延迟到子类中。模板方法模式允许子类在不改变算法结构的情况下重新定义算法中的某些步骤。 9.2 代码示例 在Python中使用…

【亚马逊云科技】通过高性能低延迟对象存储 S3实现网站资源托管

本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 亚马逊云科技开发者社区, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道 文章目录 前言1 S3 介绍1.1 优点 2 使用步骤2.1 注册账户2.2 创建存储桶2.2.1 打开控制…

智能指针管理“newed对象”

为什么要有智能指针&#xff1f; 指针智能是管理管理动态内存分配对象的一种机制。它提供了自动管理内存&#xff0c;避免常见内存泄漏和悬空指针。 对于上述Func函数的操作&#xff0c;一不小心就会产生很多问题。 p1 new时候抛异常 什么都不做p2 new时候抛异常 p1需要被清理…

深入理解JVM虚拟机第三十篇:详解JVM当中栈帧的一些附加信息以及虚拟机栈的5个面试题

😉😉 欢迎加入我们的学习交流群呀: ✅✅1:这是孙哥suns给大家的福利! ✨✨2:我们免费分享Netty、Dubbo、k8s、Mybatis、Spring...应用和源码级别的视频资料 🥭🥭3:QQ群:583783824 📚📚 工作微信:BigTreeJava 拉你进微信群,免费领取! 🍎🍎4:本文章…

Vue3后台管理-项目总结

后台管理 1. 动态路由2. 动态侧边栏菜单 持续更新中。。。 1. 动态路由 后台路由模型数据 &#xff08;如果后端不知道怎么转为 这种树结构的路由&#xff0c;可以参考 普通数组转树结构的数组&#xff09; const dynamicRoutes [{path: /,name: Layout,redirect: /home,comp…

如何在Ubuntu的Linux系统上搭建nacos集群

官方给出的集群部署架构图 集群部署说明 (nacos.io)3个或3个以上nacos节点才能构成集群当前示例中包含3个nacos节点&#xff0c;同时一个负载均衡器代理3个nacos&#xff0c;本示例中负载均衡器可使用的是nginx 准备并安装好正常运行的nginx&#xff0c;本示例略准备并安装好正…

Redis权限管理体系(一):客户端名及用户名

在Redis6之前的版本中&#xff0c;因安全认证的主要方式是使用Redis实例的密码进行基础控制&#xff0c;而无法按照不同的应用来源配置不同账号以及更细粒度的操作权限控制来管理。本文先从client list中的信息入手&#xff0c;逐步了解Redis的客户端名设置、用户设置及权限控制…

Numpy库

目录 介绍&#xff1a; 一、生成 1.1普通生成 1.2随机生成 1.3其它生成 二、访问 三、赋值 四、运算 五、其它 介绍&#xff1a; NumPy是一个用于数值计算的Python库&#xff0c;它提供了高效的多维数组对象&#xff08;ndarray&#xff09;、用于数组计算的函数以及用于…

【Monitor, Maintenance Operation, Script code/prgramme】

Summary of M,M&O,Program JD) Monitor & M&O Symbio信必优) Job chance/opportunities on Dec 12th, 20231.1) Content 招聘JD job description:1.2) suggestions from Ms Liang/Winnie on Wechat app1.3) Java微服务是什么&#xff1f;1.3.1) [URL Java 微服务](…

如何使用PHP创建RESTful API?

创建 RESTful API&#xff08;Representational State Transferful Application Programming Interface&#xff09;是通过 HTTP 协议提供对资源的访问和操作的一种常见方式。以下是使用 PHP 创建 RESTful API 的一般步骤&#xff1a; 步骤 1: 设计 API 路由 首先&#xff0c…

QT linux下使用Qt Creator调试附加进程,加快调试

文章目录 一、调试附加进程二、配置流程&#xff08;1&#xff09;开放linux内核配置项&#xff08;2&#xff09;命令行直接启动程序&#xff08;3&#xff09;调试附加到进程 一、调试附加进程 使用附加进程调试要比直接调试速度要快&#xff0c;但是不足之处是&#xff0c;…

京微齐力:基于H7的平衡控制系统(一、姿态解析)

目录 前言一、关于平衡控制系统二、实验效果三、硬件选择1、H7P20N0L176-M2H12、MPU6050 四、理论简述五、程序设计1、Cordic算法2、MPU6050采集数据3、fir&iir滤波4、姿态解算 六、资源消耗&工程获取七、总结 前言 很久之前&#xff0c;就想用纯FPGA做一套控制系统。可…

C++二维数组(2)

图形相似度 题目描述&#xff1a; 给出两幅相同大小的黑白图像&#xff08;用0-1矩阵&#xff09;表示&#xff0c;求它们的相似度。 说明&#xff1a;若两幅图像在相同位置上的像素点颜色相同&#xff0c;则称它们在该位置具有相同的像素点。 两幅图像的相似度定义为相同像素…

通过socketpair+select实现线程同步的用法代码

1&#xff0c;socketpair详细用法说明 socketpair()是一个Unix/Linux系统调用&#xff0c;用于创建一个本地端对&#xff08;socket pair&#xff09;。它创建两个已连接的socket描述符&#xff0c;用于在同一进程中的两个不同线程之间进行通信。 以下是socketpair()函数的详…

飞天使-linux操作的一些技巧与知识点6-ansible结合jinja2使用,可规范化进行自动化管控

文章目录 在议playbook虚拟环境中安装ansibleplaybook 结合变量的一些演示普通的vars_files 变量&#xff0c;在同级目录创建目录使用host_vars 定义变量group_vars定义变量根据不同系统操作不同版本传递多个外置变量举例几个不同的示例factswhenloophandlers 与 notifytags 任…

个人养老金知多少?

个人养老金政策你了解吗&#xff1f;税优政策你知道吗&#xff1f;你会计算能退多少税吗&#xff1f;… 点这里看一看

橘子学K8S01之容器中所谓的隔离

我们一直都在说容器就是一个沙盒&#xff0c;沙盒技术顾名思义就是像一个集装箱一样&#xff0c;把应用(服务&#xff0c;进程之类的)装起来的技术&#xff0c;这样每个进程在自己的沙盒中和其他的沙盒隔离开来&#xff0c;每个沙盒之间存在一个边界使得他们互不干扰&#xff0…

NFTScan 获得比特丛林 (BitJungle) 公司战略投资

近日&#xff0c;NFT 数据基础设施服务商 NFTScan 获得知名区块链安全公司比特丛林 (BitJungle) 战略投资。未来&#xff0c;双方将在链上数据和区块链安全领域展开战略合作&#xff0c;高效联动&#xff0c;让区块链大数据发挥更大价值。 关于 BitJungle 比特丛林 (BitJungle…

删除指定文件夹下的所有文件

要删除指定文件所在的文件夹下的所有文件&#xff08;不包括文件夹本身&#xff09;&#xff0c;你可以使用Python的os模块和os.path模块。下面是一个示例代码&#xff0c;演示如何删除文件夹下的所有文件&#xff0c;但保留文件夹本身&#xff1a; import osdef delete_files…

鸿鹄云商:Java商城引领商业模式的潮流,免费搭建多种商城模式

java SpringCloud版本b2b2c鸿鹄云商平台全套解决方案 使用技术&#xff1a; Spring CloudSpring BootMybatis微服务服务监控可视化运营 B2B2C平台&#xff1a; 平台管理端(包含自营) 商家平台端(多商户入驻) PC买家端、手机wap/公众号买家端 微服务&#xff08;30个通用…