如何在PHP中以ISO 8601开始/结束简洁地格式化时间间隔?

时间:2016-06-08 12:46:56

标签: php datetime iso8601

我希望将时间间隔表示为开始/结束,同时还要利用ISO 8601似乎允许的缩写:对于与起始点相同的间隔结束字段。例如,现在开始并持续一周的间隔将是2016-06-08T12:27Z / 15T12:27(注意省略第二个“2016-06 - ”)。

防止潜在的XY问题第二次猜测:我希望这个区间表示为2016-06-08T12:27Z / P1W,即使它更短。我希望直接表示结束时间,但是尽可能缩写。

我不认为DatePeriod做我想要的 - 是吗?它似乎要么完成一半的工作(独立开始和结束,没有缩写的可能性)或错误的工作(返回持续时间,而不是结束时间)。

1 个答案:

答案 0 :(得分:3)

我不明白你的问题。但是短期记录呢:

制作字符串2016-06-08T12:27Z/2016-06-15T12:27

通过简单的正则表达式减少它:

^(.+)\b(.+)\/\1(.+)  to  \1\2/\3  =>  2016-06-08T12:27Z/15T12:27 

demo

<强>更新

测试后的常见结果

^(.*)(?:\b|T)(.*Z)\/\1(.+)Z$

demo