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

layui框架实战案例(25):laydate中mark的数据后端生成

mark,自定义日期标记。该属性是对 calendar 属性的进一步延伸,灵活度更高。属性可批量设置多个日期标记,如:

mark: {'0-10-14': '生日', //每年每月的某一天'0-0-10': '工资', // 每月 10 号'2008-8-8': '开幕', // 指定的日期
}

其中日期的格式必须是2008-8-8,而不能是2024-03-07,即当月份和天数是个位数时,不能用0补足。

场景描述

如在mysql数据库中遍历循环出对应的时间阶段,格式如何:

// 定义多组起始和结束日期
$datePairs = [['start' => '2023-03-12 08:00', 'end' => '2023-03-13 12:00'],['start' => '2023-03-16 08:00', 'end' => '2023-03-17 12:00'],['start' => '2023-03-19 08:00', 'end' => '2023-03-20 12:00'],['start' => '2023-04-01 09:00', 'end' => '2023-04-03 15:00'],
];

封装函数

function generateDateRanges($datePairs)
{//初始化最终合并的日期数组$mergedDateArray = [];//遍历每一组起始和结束日期foreach ($datePairs as $pair) {$startDateStr = $pair['start'];$endDateStr = $pair['end'];//创建DateTime对象$startDate = new DateTime($startDateStr);$endDate = new DateTime($endDateStr);//将起始日期的时间设置为午夜开始$startDate->setTime(0, 0, 0);//临时数组,用于存储当前日期对的日期范围$tempDateArray = [];//循环遍历当前日期对的日期范围$currentDate = clone $startDate; //克隆起始日期,以避免修改原始对象while ($currentDate <= $endDate) {//只添加日期部分(不包括时间)到临时数组中$tempDateArray[] = $currentDate->format('Y-n-j');//将当前日期增加一天$currentDate->modify('+1 day');}//将当前日期对的日期范围合并到最终数组中$mergedDateArray = array_merge($mergedDateArray, $tempDateArray);}//去除重复日期(如果需要)$mergedDateArray = array_unique($mergedDateArray);//按日期顺序排序(如果需要)sort($mergedDateArray);//转换日期格式,并生成你想要的输出格式$output = [];foreach ($mergedDateArray as $date) {$output[$date] = '';}//排序输出数组(如果需要)ksort($output);return $output;
}
  • 使用$currentDate->format(‘Y-n-j’)来格式化日期,其中Y代表四位数的年份,n代表不带前导零的月份,j代表不带前导零的天数。这样,输出的日期将不会包含任何前导零;

  • 运行上述代码将得到一个日期数组,其中的键是格式化为Y-n-j的日期字符串,值则是空字符串。如果想要包含其他的值,修改 r e s u l t [ result[ result[formattedDate] = ‘’;

  • 在遍历每个日期范围时,对$endDate使用了modify(‘+1 day’),这是因为DateTime对象在比较时是不包含结束日期那一天的。所以,人为地增加一天,以确保包含结束日期那天的数据。

  • 使用array_unique函数来去除数组中的重复日期(尽管在这个特定例子中由于我们按日期顺序添加,所以实际上不会有重复,但保留这一步可以作为一般性处理)。然后,使用sort函数对日期数组进行排序,确保输出结果是按日期顺序排列的。


@漏刻有时

相关文章:

  • 分别使用TCP/UDP实现互相实时发送消息,接收消息功能
  • Numpy、Matplotlib、Pandas常用函数
  • ActiViz中的数据集vtkPolyData
  • 【c++】类和对象(二)this指针
  • yoloV3的目标检测_3.11
  • Copilot for Microsoft365使用体验
  • MyBatis框架解析与优化
  • 2024-03-25 商业分析-窃取他人商业环节-抢夺他人市场
  • 牛客周赛 Round 38 C.小红的字符串构造【构造】
  • AI视频渲染原理是什么?
  • 柯桥专业会计培训|会计实操做账手工账电脑账出纳报税手把手教
  • Linux命令-disown命令(从当前的shell中移除作业)
  • nandgame中的计数器(带加载功能)
  • 利用Python和IP技术实现智能旅游情报系统
  • 01 React新建开发环境
  • @angular/forms 源码解析之双向绑定
  • [LeetCode] Wiggle Sort
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • Angular 响应式表单之下拉框
  • egg(89)--egg之redis的发布和订阅
  • HTTP中的ETag在移动客户端的应用
  • JavaScript实现分页效果
  • Java应用性能调优
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • Node 版本管理
  • React16时代,该用什么姿势写 React ?
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 初识 webpack
  • 浮现式设计
  • 计算机常识 - 收藏集 - 掘金
  • 每天10道Java面试题,跟我走,offer有!
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 我与Jetbrains的这些年
  • 移动端解决方案学习记录
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • ​【已解决】npm install​卡主不动的情况
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • "无招胜有招"nbsp;史上最全的互…
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • (¥1011)-(一千零一拾一元整)输出
  • (javascript)再说document.body.scrollTop的使用问题
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (Note)C++中的继承方式
  • (二十三)Flask之高频面试点
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • (转)ABI是什么
  • (转)c++ std::pair 与 std::make
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算