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

2024-03-26 11:20

本文主要是介绍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函数对日期数组进行排序,确保输出结果是按日期顺序排列的。


@漏刻有时

这篇关于layui框架实战案例(25):laydate中mark的数据后端生成的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/848332

相关文章

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

PHP轻松处理千万行数据的方法详解

《PHP轻松处理千万行数据的方法详解》说到处理大数据集,PHP通常不是第一个想到的语言,但如果你曾经需要处理数百万行数据而不让服务器崩溃或内存耗尽,你就会知道PHP用对了工具有多强大,下面小编就... 目录问题的本质php 中的数据流处理:为什么必不可少生成器:内存高效的迭代方式流量控制:避免系统过载一次性

C#实现千万数据秒级导入的代码

《C#实现千万数据秒级导入的代码》在实际开发中excel导入很常见,现代社会中很容易遇到大数据处理业务,所以本文我就给大家分享一下千万数据秒级导入怎么实现,文中有详细的代码示例供大家参考,需要的朋友可... 目录前言一、数据存储二、处理逻辑优化前代码处理逻辑优化后的代码总结前言在实际开发中excel导入很

MyBatis分页查询实战案例完整流程

《MyBatis分页查询实战案例完整流程》MyBatis是一个强大的Java持久层框架,支持自定义SQL和高级映射,本案例以员工工资信息管理为例,详细讲解如何在IDEA中使用MyBatis结合Page... 目录1. MyBATis框架简介2. 分页查询原理与应用场景2.1 分页查询的基本原理2.1.1 分

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可

深度解析Java @Serial 注解及常见错误案例

《深度解析Java@Serial注解及常见错误案例》Java14引入@Serial注解,用于编译时校验序列化成员,替代传统方式解决运行时错误,适用于Serializable类的方法/字段,需注意签... 目录Java @Serial 注解深度解析1. 注解本质2. 核心作用(1) 主要用途(2) 适用位置3