2

我有这个函数,它为某些东西创建了一个过期时间。该函数采用几个具有默认值的参数。我这样做是这样的:

public static function blockAccount(
    $id,
    $years = 0,
    $months = 0,
    $days = 0,
    $hours = 0,
    $minutes = 0,
    $seconds = 0
) {
    // Determine expiry date for the block
    $date = Text::getDateTime();
    $date->add(
        new \DateInterval(
            'P' . $years . 'Y'
            . $months . 'M'
            . $days . 'D'
            . $hours . 'H'
            . $minutes . 'I'
            . $seconds . 'S'
        )
    );
    $blockedExpiryDate = $date->format(Filter::FORMAT_MICRO_TIMESTAMP);

    $accountModel = AccountModel::selectById($id);
    $accountModel->setBlockedExpiryDate($blockedExpiryDate);
    $accountModel->save();
}

当只设置年份运行此程序时,我收到一个错误,说:DateInterval::__construct(): Unknown or bad format (P1Y0M0D0H0I0S).

有什么想法我在这里做错了吗?

4

1 回答 1

10

你错过了之前的时间元素和分钟不T应该是:MI

如果持续时间包含时间元素,则规范的该部分以字母 T 开头。

$date->add(
    new \DateInterval(
        'P' . $years . 'Y'
        . $months . 'M'
        . $days . 'DT'
        . $hours . 'H'
        . $minutes . 'M'
        . $seconds . 'S'
    )
);

您可能还希望使您的代码更智能,并简单地省略任何具有零值的日期/时间元素。

于 2014-03-26T13:48:12.927 回答