编程语言
首页 > 编程语言> > php – 将DateInterval格式化为ISO8601

php – 将DateInterval格式化为ISO8601

作者:互联网

我目前正在开发一个php项目,需要将DateInterval格式化为ISO8601(类似这样):

P5D

此格式可用于创建DateTime和DateInterval对象,但我无法找到将DateInterval格式化为此格式的方法.有没有?如果没有,那可能是一个轻量级的解决方案呢?

解决方法:

那么,如果你在构造一个格式时查看格式的规范:

Y years

M months

D days

W weeks. These get converted into days, so can not be combined with D.

H hours

M minutes

S seconds

然后看看你有什么工作(http://php.net/manual/en/dateinterval.format.php),看起来你会做的是:

$dateInterval = new DateInterval( /* whatever */ );
$format = $dateInterval->format("P%yY%mM%dD%hH%iM%sS");
//P0Y0M5D0H0M0S
//now, we need to remove anything that is a zero, but make sure to not remove
//something like 10D or 20D
$format = str_replace(["M0S", "H0M", "D0H", "M0D", "Y0M", "P0Y"], ["M", "H", "D", "M", "Y0M", "P"], $format);
echo $format;
//P0M5D

现在,我做的不同之处是我总是包括月份,即使它是0.这样做的原因是分钟和月份都由M表示 – 如果我们总是包括月份,那么如果有一分钟我们知道这是几分钟.否则,我们必须做一堆逻辑,看看我们是否需要将P更改为PT,因此它知道此实例中的a M代表Minute.

例如:

// For 3 Months
new DateInterval("P3M");
// For 3 Minutes
new DateInterval("PT3M"));

但相反,我们做:

// For 3 Months
new DateInterval("P3M");
// For 3 Minutes
new DateInterval("P0M3M"));

标签:php,datetime,iso8601,dateinterval
来源: https://codeday.me/bug/20190628/1314123.html