alameda-red / datetime
Alameda 日期时间组件
0.0.2
2015-01-28 00:00 UTC
Requires
- php: >=5.3.3
- zebba/utility: 1.*
Requires (Dev)
- phpunit/phpunit: 4.*
This package is auto-updated.
Last update: 2024-09-09 07:55:24 UTC
README
此组件提供了一套工具,用于处理 PHP 中的日期和时间相关对象。
安装
您可以通过修改 composer.json 来安装
{ "require" : { "alameda-red/datetime" : "0.*" } }
或者运行
$ composer require "alameda-red/datetime=0.*"
用法
让我们先提个警告:使用 \DateIntervals 并非易事!显然,在某个范围内你可以做很多事情。一旦超出这个范围,你就得自己解决问题,实际上也没有工具能帮助你。这个组件也无法提供帮助。
当你基于秒、分钟、小时和天的值编写代码时,在较窄的时间范围内,你通常都是安全的。如果你使用 DateInterval::shorten($interval, true),请确保你理解这个值将代表什么。闰年的每小时表示(第二个参数为 true)将是 366 * 24 = 8784 小时,而年份表示(第二个参数为 false 默认)将是 365 * 24 = 8760 小时。
分割 \DateInterval
有没有想过将你的 \DateInterval('P1D') 分割成两部分,以得到 \DateInterval('PT12H')?你可以这样做
<?php $interval = new \DateInterval('P1D'); $split = DateInterval::divide($interval, 2); // \DateInterval('PT12H')
创建 \DateInterval 的简短、易读的表示
不知道 \DateTime('PT86400S) 是什么意思?让它更易读
<?php $interval = new \DateInterval('PT86400S'); $short = DateInterval::shorten($interval); // \DateInterval('P1D') $short = DateInterval::shorten($interval, true); // \DateInterval('P1D') $short = DateInterval::shorten($interval, false); // \DateInterval('PT24H')
\DateInterval 的字符串表示
如果你不想将你的 \DateInterval 对象存储成人类可读的形式,在数据库中用 'PT24H' 或 'P1D' 来代替其他开发者存储的以秒为单位的值(86400)可能更吸引人。
<?php $interval = new \DateInterval('PT86400S'); $string = DateInterval::getString($interval); // 'P1D' $string = DateInterval::getString($interval, true); // 'P1D' $string = DateInterval::getString($interval, false); // 'PT24H'
使用更大的时间单位来缩短字符串
因此 \DateInterval('PT1440M') 是一天,让它看起来像一天
<?php $interval = new \DateInterval('PT1440M'); $short = DateInterval::shortenString($interval); // 'P1D' $short = DateInterval::shortenString($interval, true); // 'P1D' $short = DateInterval::shortenString($interval, false); // 'PT24H'
求和 \DateIntervals
处理区间进行计算?再也不要挣扎了!
<?php $base = new \DateInterval('PT0H'); $i1 = new \DateInterval('PT1S'); $i2 = new \DateInterval('PT1M'); $i3 = new \DateInterval('PT1H'); $sum = DateInterval::sum($base, $i1, $i2, $i3); // 'PT1H1M1S' $base = new \DateInterval('PT1H1M1S'); $i1 = new \DateInterval('PT1S'); $i1->invert = true; $i2 = new \DateInterval('PT1M'); $i2->invert = true; $i3 = new \DateInterval('PT1H'); $i3->invert = true; $sum = DateInterval::sum($base, $i1, $i2, $i3); // 'PT0H', $sum->invert -> true