在DateInterval格式中,'P'代表什么?

96

考虑以下示例,引用自PHP手册的DateTime部分

<?php
  $date = new DateTime('2000-01-20');
  $date->sub(new DateInterval('P10D'));
  echo $date->format('Y-m-d') . "\n";
?>

'D'代表天数,那么在格式化中 'P' 代表什么呢?

3个回答

132

来自官方手册

时间间隔说明。

格式以字母P开头,表示“周期”。每个持续时间段由整数值和一个时间单位标识符组成。如果该持续时间包含时间元素,则该部分的说明以字母T为前缀。


26

15
太疯狂了,这么多例子都使用“P”,但是参考资料却如此轻描淡写。我猜它的意思是“周期”,然后我在php.net上搜索这个词,但显然从来没有进入构造函数页面。但是,在date_formatDateTime::diffDateTime::formatDateInterval和大量通用的日期/时间函数中都没有提到它。我想知道是否有其他前缀需要知道,可我找不到,直到我来到了Stack Exchange. - Madivad

18

我认为可以更详细地回答这个问题。首先,DateInterval构造方法需要一个名为$interval_spec的字符串参数。

DateInterval::__construct ( string $interval_spec )

此参数的规范如下所述:
格式以字母P开头,表示周期。每个时间段由一个整数值和一个时间单位指示符组成。如果时间段包含时间元素,则该部分规范以字母T开头。
以下是一些时间单位指示符:
- Y 表示年 - M 表示月 - D 表示日 - W 表示周。这些将被转换为天数,因此不能与D组合使用。 - H 表示小时 - M 表示分钟 - S 表示秒
以下是一些使用时间单位指示符的例子:
- 两天是P2D。 - 两秒是PT2S。 - 六年零五分钟是P6YT5M。
请按照文档中所述的顺序输入单位类型,从左侧最大的单位到右侧最小的单位。因此,年份在月份之前,在天数之前,在分钟之前等等。因此,一年和四天必须表示为P1Y4D,而不是P4D1Y。
该规范也可以表示为日期时间。例如:一年、两个月、四天应表示为P0001-02-04T00:00:00。
但是,该格式中的值不能超过给定周期的回滚点(例如,25小时是无效的)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接