Verta时间边界详解:5分钟掌握startOf与endOf系列方法,轻松计算日周月年首尾

📅 2026/8/17 18:28:48
Verta时间边界详解:5分钟掌握startOf与endOf系列方法,轻松计算日周月年首尾
Verta时间边界详解5分钟掌握startOf与endOf系列方法轻松计算日周月年首尾【免费下载链接】vertaتبدیل تاریخ میلادی به شمسی برای لاراول و کار با تاریخ جلالی و اعتبارسنجی تاریخ项目地址: https://gitcode.com/gh_mirrors/ve/vertaVerta 是 Laravel 生态中广受欢迎的波斯历Jalali/Shamsi日期时间扩展库它基于 PHP 原生 Datetime 并兼容 Carbon让开发者可以像操作公历一样流畅地处理伊朗历法。在报表统计、定时任务和数据分析场景中最常用的能力莫过于时间边界Boundaries计算——也就是把任意时刻对齐到分钟、小时、日、周、月、季度或年的起点与终点。本文将为你系统拆解 Verta 的 startOf 与 endOf 系列方法配以可直接运行的示例代码让你一次看懂、快速上手。什么是时间边界为什么它如此重要时间边界指的是把一个具体时间点归位到某个时间单位的首尾。例如给定1398-10-10 21:30:50波斯历它的日起点是当天00:00:00月终点是当月最后一天的23:59:59。在业务开发中这种能力无处不在 统计今天新增的订单数需要把查询范围锁定在当日 00:00:00 到 23:59:59️ 生成月度报表时需要动态计算月初与月末⏰ 定时任务经常要判断当前是否处于某小时的起点。Verta 把这些逻辑封装成了两个对称的方法族startXxx 系列取起点与endXxx 系列取终点调用后直接返回 Verta 对象支持链式操作非常顺手。分钟与小时边界精确到秒的对齐技巧最细粒度的边界是分钟和小时适合秒杀活动、日志分片等场景。相关实现可参考 BoundariesTest.php 中的测试用例use Hekmatinasser\Verta\Verta; $v Verta::parse(1398-10-10 21:30:50); echo $v-startMinute()-format(Y-m-d H:i:s); // 1398-10-10 21:30:00 echo $v-endMinute()-format(Y-m-d H:i:s); // 1398-10-10 21:30:59 echo $v-startHour()-format(Y-m-d H:i:s); // 1398-10-10 21:00:00 echo $v-endHour()-format(Y-m-d H:i:s); // 1398-10-10 21:59:59注意endMinute()会把秒归零到59endHour()则把分钟和秒都推到59:59这样在数据库区间查询中可以直接使用BETWEEN或 / 不会漏掉最后一秒的数据。日与周边界startDay、endDay 的常见用法按天统计是业务中的高频需求。使用startDay()与endDay()即可快速拿到当天的起止时刻$v Verta::parse(1398-10-10 21:30:50); echo $v-startDay()-format(Y-m-d H:i:s); // 1398-10-10 00:00:00 echo $v-endDay()-format(Y-m-d H:i:s); // 1398-10-10 23:59:59而startWeek()与endWeek()则帮你定位本周第一天通常是周六的零点与本周最后一天的最后一秒非常适合生成本周热销榜之类的统计。所有边界方法都定义在 Verta 的核心类 src/Verta.php 及其父类hekmatinasser/jalali中方法命名与 Carbon 保持一致的直觉。月与季度边界轻松应对波斯历的月长差异波斯历的月份天数并不固定——前六个月为 31 天后五个月为 30 天最后一个月平年 29 天、闰年 30 天。如果手写逻辑极易出错而 Verta 已经内置处理echo $v-startMonth()-format(Y-m-d H:i:s); // 1398-10-01 00:00:00 echo $v-endMonth()-format(Y-m-d H:i:s); // 1398-10-30 23:59:59 echo $v-startQuarter()-format(Y-m-d H:i:s); // 1398-10-01 00:00:00 echo $v-endQuarter()-format(Y-m-d H:i:s); // 1398-12-30 23:59:59季度边界以三个月为单位切分1–3 月、4–6 月、7–9 月、10–12 月startQuarter()会返回季度首月的一号零点endQuarter()会返回季度末月的最后一天最后一秒对财务结算类业务尤为实用。年边界与组合实战从零搭建本月报表最后是startYear()与endYear()直接给出波斯新年的起止时刻。把这些方法组合起来就能快速构建完整的统计查询$now verta(); // 当前波斯历时间 $monthStart $now-startMonth()-datetime(); // 本月 1 日 00:00:00 $monthEnd $now-endMonth()-datetime(); // 本月最后一天 23:59:59 // 直接用于 Eloquent 查询 $orders Order::whereBetween(created_at, [$monthStart, $monthEnd])-get();得益于 src/helpers.php 提供的verta()辅助函数你甚至不需要手动new对象开箱即用。所有边界测试用例也都集中在 tests/BoundariesTest.php 与 tests/ModificationTest.php 中遇到边界行为拿不准时查阅测试是最快的验证方式。结语边界计算让波斯历开发事半功倍掌握 Verta 的 startOf 与 endOf 系列方法等于拿到了波斯历时间统计的万能钥匙——从分钟到年从单点到区间一行代码即可完成对齐且天然兼容 Laravel 的 Carbon 体系。建议你在实际项目中把报表、统计、定时任务的时间窗口统统换成这些边界方法既减少手写日期计算的 bug也让代码更易读、更易维护。现在就去你的 Laravel 项目里试一试吧【免费下载链接】vertaتبدیل تاریخ میلادی به شمسی برای لاراول و کار با تاریخ جلالی و اعتبارسنجی تاریخ项目地址: https://gitcode.com/gh_mirrors/ve/verta创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考