十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Verta日期比较与差值计算:diff、between、closest等12个方法详解

Verta日期比较与差值计算:diff、between、closest等12个方法详解 Verta日期比较与差值计算diff、between、closest等12个方法详解【免费下载链接】vertaتبدیل تاریخ میلادی به شمسی برای لاراول و کار با تاریخ جلالی و اعتبارسنجی تاریخ项目地址: https://gitcode.com/gh_mirrors/ve/verta在 Laravel 项目中处理波斯历Jalali/Shamsi 太阳历日期时Verta是最流行的日期时间工具包之一。它不仅能轻松完成公历与波斯历互转还提供了强大的日期比较与差值计算能力。无论是计算会员剩余天数、判断活动是否在区间内还是找出离今天最近的纪念日Verta 都能用一行代码搞定。本文将带你一口气掌握 diff、between、closest 等 12 个高频方法新手也能快速上手。快速开始安装 Verta在动手之前先确认项目环境。Verta 支持 PHP 8.0 与 Laravel 8~12安装非常简单composer require hekmatinasser/verta如果你希望直接查看源码也可以克隆仓库git clone https://gitcode.com/gh_mirrors/ve/verta安装后项目会提供全局辅助函数verta()定义在 src/helpers.php同时Verta类本身继承自Jalali见 src/Verta.php所有下面讲到的方法都可以直接使用。$now verta(); // 当前波斯历时间差值计算diff 系列 7 个方法diff 系列用于计算两个波斯历日期之间的差值覆盖年、月、周、日、时、分、秒 7 个时间单位正好是12 个核心方法中的第一梯队。它们的用法完全一致默认返回绝对值传入第二个参数false时返回带正负号的差值当前日期更早则为负数。diffYears计算年份差$datetime verta(1398-10-10 21:30:50); $datetime-diffYears(verta(1395-10-10 21:30:50)); // 3适用于计算年龄、工龄等场景波斯历年份差值一目了然。diffMonths计算月份差$datetime-diffMonths(verta(1397-08-10 21:30:50)); // 14 $datetime-diffMonths(verta(1399-12-15 21:30:50), false); // -14适合计算订阅时长、分期期数。diffWeeks 与 diffDays周差与日差$datetime-diffWeeks(verta(1398-11-15 21:30:50)); // 5 $datetime-diffDays(verta(1398-10-15 21:30:50)); // 5 $datetime-diffDays(verta(1398-10-01 21:30:50), false); // -9计算剩余天数、倒计时天数时diffDays是最常用的方法。diffHours、diffMinutes、diffSeconds时分秒差值$datetime-diffHours(verta(1398-10-10 23:30:50)); // 2 $datetime-diffMinutes(verta(1398-10-10 21:40:50)); // 10 $datetime-diffSeconds(verta(1398-10-10 21:30:53)); // 3适合计算订单超时、会话有效期、接口响应耗时等精细场景。 小技巧7 个 diff 方法签名完全一致记一个就相当于记了七个。区间判断between 方法between用于判断某个日期是否落在两个日期之间返回布尔值。$datetime verta(1398-10-10 21:30:50); // 默认包含边界值 $datetime-between(verta(1398-10-10 21:30:50), verta(1398-10-11 21:30:50)); // true // 第三个参数传 false 表示不包含边界 $datetime-between(verta(1398-10-10 21:30:50), verta(1398-10-11 21:30:50), false); // false // 两个边界即使传反了也能正确判断 $datetime-between(verta(1398-10-13 21:30:50), verta(1398-10-09 21:30:50)); // true促销活动是否生效、会员是否在有效期内用between判断最合适。最近与最远closest 与 farthest这两个方法用于在两个候选日期中找出与当前日期**更近closest或更远farthest**的那一个返回的是候选日期对象。$datetime verta(1398-10-10 21:30:50); // 两个候选日中谁离当前日期更近 $datetime-closest(verta(1398-10-10 21:30:01), verta(1398-10-11 21:30:50)); // 返回 1398-10-10 21:30:01 // 谁离当前日期更远 $datetime-farthest(verta(1398-10-10 21:30:01), verta(1398-10-11 21:30:50)); // 返回 1398-10-11 21:30:50典型应用从最近还款日和下一个节假日中选出更近的时间点提醒用户。最小与最大min 与 maxmin返回两个日期中较早的那个max返回较晚的那个很适合在业务中求极值。$datetime verta(1398-10-10 21:30:50); $datetime-min(verta(1398-10-10 21:30:01)); // 1398-10-10 21:30:01 $datetime-max(verta(1398-10-10 21:30:55)); // 1398-10-10 21:30:55比如计算一组订单的最早/最晚下单时间无需自己写if判断。彩蛋6 个比较运算符除了上面 12 个方法Verta 还内置了类似 Carbon 的比较运算符判断结果同样返回布尔值$datetime verta(1398-10-10 21:30:50); $datetime-eq(verta(1398-10-10 21:30:50)); // true 等于 $datetime-ne(verta(1398-10-10 21:30:51)); // true 不等于 $datetime-gt(verta(1398-10-10 21:30:49)); // true 大于 $datetime-gte(verta(1398-10-10 21:30:50)); // true 大于等于 $datetime-lt(verta(1398-10-10 21:30:51)); // true 小于 $datetime-lte(verta(1398-10-10 21:30:50)); // true 小于等于配合if语句做业务判断代码可读性直接提升一个档次。12 个方法速查表类别方法返回一句话说明差值diffYears整数年份差差值diffMonths整数月份差差值diffWeeks整数周数差差值diffDays整数天数差差值diffHours整数小时差差值diffMinutes整数分钟差差值diffSeconds整数秒数差区间between布尔是否在区间内可控制是否含边界选择closest日期两个候选中最近的一个选择farthest日期两个候选中最远的一个极值min日期两个日期中较早的极值max日期两个日期中较晚的⚠️ 注意diff 系列默认返回绝对值需要方向时务必传入第二个参数false这是新手最容易踩的坑。一个综合小例子把今天和会员到期日、最近的活动日放在一起算感受一下组合拳$today verta(); // 会员还剩多少天到期 $daysLeft $today-diffDays(verta(1401-12-01)); // 今天是否在春节活动期间 $isInSale $today-between(verta(1401-12-25), verta(1402-01-15)); // 离哪个日子更近会员到期日 vs 活动开始日 $nearest $today-closest(verta(1401-12-01), verta(1401-12-25));结语Verta 的日期比较与差值计算能力覆盖了日常开发 90% 以上的日期逻辑需求而且方法命名直观、与 Carbon 风格一脉相承学习成本极低。想验证这些方法的边界行为可以直接阅读项目中的测试用例 tests/ComparisonTest.php所有示例都与源码测试一一对应。现在就把这些方法用进你的 Laravel 项目吧波斯历日期处理从此不再头疼【免费下载链接】vertaتبدیل تاریخ میلادی به شمسی برای لاراول و کار با تاریخ جلالی و اعتبارسنجی تاریخ项目地址: https://gitcode.com/gh_mirrors/ve/verta创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表