alameda-red/datetime

Alameda 日期时间组件

0.0.2 2015-01-28 00:00 UTC

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