PHP:根据天 获取前N周时间戳;获取本周开始结束时间戳;返回星期几;返回第几周

一、打印

array ( 0 => '2022-09-05~2022-09-11', 1 => '2022-09-12~2022-09-18', 2 => '2022-09-19~2022-09-25', )
1662307200 1664121599
1663516800 1664121599
星期四
38

二、代码

<?php

class Demo
{
    //开始函数
    public function test()
    {
        # 根据 天,返回前N周 数据
        $result = self::getMoreWeeks('2022-09-22');
        var_export($result); //array ( 0 => '2022-09-05~2022-09-11', 1 => '2022-09-12~2022-09-18', 2 => '2022-09-19~2022-09-25', )
        echo '<br/>';

        # 根据 天 数组,返回周的开始、结束时间戳
        list($startUnix, $endUnix) = self::getWeeksUnix(['2022-09-08', '2022-09-15', '2022-09-22']);
        echo $startUnix . ' ' . $endUnix . ' <br/>'; //1662307200 1664121599

        # 根据 天,返回本周开始结束时间戳
        list($startUnix, $endUnix) = self::getOneWeekUnix('2022-09-22');
        echo $startUnix . ' ' . $endUnix . ' <br/>'; //1663516800 1664121599

        # 根据 天,返回星期几
        $week = self::getWeekByDay('2022-09-22');
        echo $week . '<br/>'; //星期四

        # 根据 天,返回第几周
        $weekNumber = self::getWeekNumber('2022-09-22');
        echo $weekNumber . '<br/>'; //38
    }

    /**
     * 获取任意天的前N周所有数据
     * @param string $day 日期:天 如 2022-09-22
     * @param int $number 前N周,默认3
     * @return array 结果数据:如 array (0 => '2022-09-05~2022-09-11',1 => '2022-09-12~2022-09-18',2 => '2022-09-19~2022-09-25',)
     */
    public function getMoreWeeks($day, $number = 3)
    {
        $dateUnix = strtotime($day); //转时间戳

        $result = [];
        for ($i = 0; $i < $number; $i++) {
            $startDay = date("Y-m-d", strtotime("this week Monday", $dateUnix));
            $endDay = date("Y-m-d", strtotime("this week Sunday", $dateUnix)); //+n周 strtotime("+1 week")

            $beforeDay = "{$startDay}~{$endDay}";

            array_unshift($result, $beforeDay); //把数据追加到数组最前面

            $dateUnix -= (86400 * 7); //7天前的时间戳
        }
        return $result;
    }

    /**
     * 根据天数组,返回周的开始、结束时间戳
     * @param array $days ['2022-09-08', '2022-09-15', '2022-09-22']
     * @return array [1662307200,1664121599]
     */
    public function getWeeksUnix($days)
    {
        //开始时间
        $startTime = $days[0] . ' 00:00:00'; //1天的开始时间
        list($startUnix, $notUse) = self::getOneWeekUnix($startTime);

        //结束时间
        $endTime = end($days) . ' 23:59:59'; //1天的结束时间
        list($notUse, $endUnix) = self::getOneWeekUnix($endTime);

        return [$startUnix, $endUnix];
    }

    /**
     * 根据天获取这一周的开始、结束时间戳
     * @param string $day 格式:yyyy-mm-dd,例如 2022-09-22
     * @return array [1663516800, 1664121599 ]
     */
    public function getOneWeekUnix($day)
    {
        //获取这天的这周的周一
        $startDay = date("Y-m-d 00:00:00", strtotime("this week Monday", strtotime($day)));
        //获取这天的这周的周日
        $endDay = date("Y-m-d 23:59:59", strtotime("this week Sunday", strtotime($day))); //+n周 strtotime("+1 week")

        $startUnix = strtotime($startDay);
        $endUnix = strtotime($endDay);

        return [$startUnix, $endUnix];
    }

    /**
     * 获取指定日期是星期几
     * @param string $day 格式:yyyy-mm-dd
     * @return mixed 星期四
     */
    public function getWeekByDay($day)
    {
        $weekArray = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"];
        return $weekArray[date("w", strtotime($day))]; //w:星期中的第几天,数字表示;0(表示星期天)到 6(表示星期六)
    }

    /**
     * 获取指定日期是当前年第几周
     * @param string $day 日期:2022-09-22
     * @return false|string 38
     */
    public function getWeekNumber($day)
    {
        $weekNumber = date("W", strtotime($day)); //W:ISO-8601 格式年份中的第几周,每周从星期一开始(PHP 4.1.0 新加的);例如:42(当年的第 42 周)
        return $weekNumber;
    }
}

三、姊妹篇

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第一篇 使用PHP 第1章 PHP快速入门教程 1.1 开始之:了解PHP 1.2 创建一个示例应用:Bob汽车零部件商店 1.2.1 创建订单表单 1.2.2 表单处理 1.3 在HTML中嵌入PHP 1.3.1 使用PHP标记 1.3.2 PHP语句 1.3.3 空格 1.3.4 注释 1.4 添加动态内容 1.4.1 调用函数 1.4.2 使用date()函数 1.5 访问表单变量 1.5.1 简短、中等以及长风格的表单变量 1.5.2 字符串的连接 1.5.3 变量和文本 1.6 理解标识符 1.7 检查变量类型 1.7.1 PHP的数据类型 1.7.2 类型强度 1.7.3 类型转换 1.7.4 可变变量 1.8 声明和使用常量 1.9 理解变量的作用域 1.10 使用操作符 1.10.1 算术操作符 1.10.2 字符串操作符 1.10.3 赋值操作符 1.10.4 比较操作符 1.10.5 逻辑操作符 1.10.6 位操作符 1.10.7 其他操作符 1.11 计算表单总金额 1.12 理解操作符的优先级和结合性: 1.13 使用可变函数 1.13.1 测试和设置变量类型 1.13.2 测试变量状态 1.13.3 变量的重解释 1.14 根据条件进行决策 1.14.1 if语句 1.14.2 代码块 1.14.3 else语句 1.14.4 elseif语句 1.14.5 switch语句 1.14.6 比较不同的条件 1.15 通过迭代实现重复动作 1.15.1 while循环 1.15.2 for和foreach循环 1.15.3 do...while循环 1.16 从控制结构或脚本中跳出 1.17 使用可替换的控制结构语法 1.18 使用declare 1.19 下一章 第2章 数据的存储与检索 2.1 保存数据以便后期使用 2.2 存储和检索Bob的订单 2.3 文件处理 2.4 打开文件 2.4.1 选择文件模式 2.4.2 使用fopen()打开文件 2.4.3 通过FTP或HTTP打开文件 2.4.4 解决打开文件时可能遇到的问题 2.5 写文件 2.5.1 fwrite()的参数 2.5.2 文件格式 2.6 关闭文件 2.7 读文件 2.7.1 以只读模式打开文件:fopen() 2.7.2 知道何时读完文件:feof() 2.7.3 每次读取一行数据:fgets()、fgetss()和fgetcsv() 2.7.4 读取整个文件:readfile()、fpassthru()和file() 2.7.5 读取一个字符:fgetc() 2.7.6 读取任意长度:fread() 2.8 使用其他有用的文件函数 2.8.1 查看文件是否存在:file_exists() 2.8.2 确定文件大小:filesize() 2.8.3 删除一个文件:unlink() 2.8.4 在文件中定位:rewind()、fseek()和ftell() 2.9 文件锁定 2.10 更好的方式:数据库管理系统 2.10.1 使用普通文件的几个问题 2.10.2 RDBMS是如何解决这些问题的 2.11 进一步学习 2.12 下一章 第3章 使用数组 3.1 什么是数组 3.2 数字索引数组 3.2.1 数字索引数组的初始化 3.2.2 访问数组的内容 3.2.3 使用循环访问数组 3.3 使用不同索引的数组 3.3.1 初始化相关数组 3.3.2 访问数组元素 3.3.3 使用循环语句 3.4 数组操作符 3.5 多维数组 3.6 数组排序 3.6.1 使用sort()函数 3.6.2 使用asort()函数和ksort()函数对相关数组排序 3.6.3 反向排序 3.7 多维数组的排序 3.7.1 用户定义排序 3.7.2 反向用户排序 3.8 对数组进行重新排序 3.8.1 使用shuffle()函数 3.8.2 使用array_reverse()函数 3.9 从文件载入数组 3.10 执行其他的数组操作 3.10.1 在数组中浏览:each()、current()、reset()、end()、next()、pos()和prev() 3.10.2 对数组的每一个元素应用任何函数:array_walk() 3.10.3 统计数组元素个数:count()、sizeof()和array_count_values() 3.10.4 将数组转换成标量变量:extract() 3.11 进一步学习 3.12 下一章 第4章 字符串操作与正则表达式 4.1 创建一个示例应用程序:智能表单邮件 4.2 字符串的格式化 4.2.1 字符串的整理:chop()、ltrim()和trim() 4.2.2 格式化字符串以便显示 4.2.

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值