持续时长转类似ISO8601中文时间格式

持续时长转类似ISO8601中文时间格式

/**
 * 持续时长转类似ISO8601中文时间格式
 * @param int $duration 持续时长(秒)
 * @return string
 */
function seconds_to_iso8601(int $duration): string
{
    $time = $duration;
    $units = [
        '年' => 3600 * 24 * 365,
        '日' => 3600 * 24,
        '时' => 3600,
        '分' => 60,
        '秒' => 1,
    ];
    $rs = [];
    foreach ($units as $name => $unit) {
        if ($unit <= $duration) {
            $quot = intval($time / $unit);
            $time -= $quot * $unit;
            if ($quot) {
                $rs[] = $quot . $name;
            }
        }
    }
    return implode('', $rs);
}

将ISO 8601格式:PnYnMnDTnHnMnS,转换成秒

/**
 * 将ISO 8601格式:PnYnMnDTnHnMnS,转换成秒
 * @param string $str
 * @return float|int|bool
 */
function ISO8601_to_seconds(string $str = 'PT1H59M')
{
    try {
        $dv = new \DateInterval($str);
        return ($dv->y * 31536000) +
            ($dv->m * 2592000) +
            ($dv->d * 86400) +
            ($dv->h * 3600) +
            ($dv->i * 60) +
            $dv->s;
    } catch (\Exception $ex) {
        // 报错
        #todo...
        return false;
    }
}
最后修改:2023 年 06 月 23 日 01 : 44 PM
如果觉得我的文章对你有用,请随意赞赏

发表评论