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


@漏刻有时

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-25 19:32:06       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-25 19:32:06       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-25 19:32:06       82 阅读
  4. Python语言-面向对象

    2024-03-25 19:32:06       91 阅读

热门阅读

  1. AST抽象语法树&webpack逻辑解析

    2024-03-25 19:32:06       57 阅读
  2. 【C语言】如何将数据写入文件?

    2024-03-25 19:32:06       45 阅读
  3. .NET 依赖注入和配置系统

    2024-03-25 19:32:06       35 阅读
  4. app上传图片和视频

    2024-03-25 19:32:06       32 阅读
  5. Warning: fread(): Length parameter must be greater than 0

    2024-03-25 19:32:06       36 阅读
  6. Docker 容器中运行 JAR 文件的方法

    2024-03-25 19:32:06       45 阅读
  7. 突破编程_C++_查找算法(分块查找)

    2024-03-25 19:32:06       42 阅读
  8. springboot多数据源&动态数据源(主从)

    2024-03-25 19:32:06       37 阅读
  9. 数据结构-双向链表-003

    2024-03-25 19:32:06       30 阅读
  10. 第N5周:调用Gensim库训练Word2Vec模型

    2024-03-25 19:32:06       40 阅读
  11. 接口自动化测试入门基础知识

    2024-03-25 19:32:06       42 阅读