首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >负DateInterval

负DateInterval
EN

Stack Overflow用户
提问于 2011-06-15 06:14:13
回答 7查看 28.6K关注 0票数 22

我想创建一个具有负DateInterval的DatePeriod对象。

这创建了一个从现在到2016年的DatePeriod。

代码语言:javascript
运行
复制
$this->Set('dates', new DatePeriod(new DateTime(), new DateInterval('P1Y'), new DateTime('2016-06-06')));

我希望从2016年开始,并使用负DateInterval移动到今天的年份

像这样的事情可能会说明我的愿望

代码语言:javascript
运行
复制
$this->Set('dates', new DatePeriod(new DateTime('2016-06-06'), new DateInterval('-P1Y'), new DateTime()));

我只是在DatePeriod或DateInterval上找不到任何关于如何做到这一点的扩展信息。我所发现的是DateInterval是可以倒置的。

EN

回答 7

Stack Overflow用户

发布于 2011-11-13 14:20:27

根据comment by kevinpeno at 17-Mar-2011 07:47 on php.net's page about DateInterval::__construct()的说法,您不能通过构造函数直接创建负DateIntervals:

代码语言:javascript
运行
复制
new DateInterval('-P1Y'); // Exception "Unknown or bad format (-P1Y)"

相反,您需要创建一个正间隔并将其invert属性显式设置为1

代码语言:javascript
运行
复制
$di = new DateInterval('P1Y');
$di->invert = 1; // Proper negative date interval

我刚刚检查了上面的代码,它完全是这样工作的。

票数 44
EN

Stack Overflow用户

发布于 2011-06-15 06:51:57

这花了点功夫。我能够得到负DateInterval的唯一方法是这样做:

代码语言:javascript
运行
复制
$interval = DateInterval::createFromDateString('-1 day');

然而,这里有一个问题。DatePeriod似乎在负间隔内不起作用。如果您将开始日期设置为在结束日期之前,则它根本不包含任何日期,如果您翻转以使开始日期在结束日期之后,则它将无限期地向后看。

您可能需要重新构造代码,以便使用带正DateIntervalDateTime::sub或带负DateIntervalDateTime::add循环遍历日期。

票数 21
EN

Stack Overflow用户

发布于 2018-01-09 11:44:57

您可以使用sub http://php.net/manual/en/datetime.sub.php

下面是一个例子

代码语言:javascript
运行
复制
$startDate = new \DateTime('2018-01-08 13:54:06');
$startDate->sub(new \DateInterval('P1D'));
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6350778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档