假定日期为:
$date = "2011-08-28";
它需要计算3个月之前的$date
- 这怎么办呢?
$new_timestamp = strtotime('-3 months', strtotime($date));
然后,您可以使用新的时间戳与PHP date()函数来显示你多么希望,例如新的日期:
echo date("Y-m-d",$new_timestamp);
对我来说,这种方式要好得多,因为代码更易读。
$datetime = Datetime::createFromFormat('Y-m-d', "2011-08-28");
$datetime->modify('-3 months');
echo $datetime->format('Y-m-d');
编辑:我是个白痴。你可以做上面如下
$datetime = new Datetime("2011-08-28");
$datetime->modify('-3 months');
echo $datetime->format('Y-m-d');
编辑:正如calumbrodie指出的那样,你可以用它代替反转间隔并将其添加到Date对象中的子方法
我试图做类似原来的问题的东西。我需要从一个DateTime对象中减去1天。我知道其他的解决方案工作,但这里是另一种方式,我更喜欢的。我用这个功能:
function getPreviousDay($dateObject){
$interval = new DateInterval('P1D');
$dateObject->sub($interval);
return $dateObject;
}
$ dateObject是一个DateTime对象,可以让你wan't任何日期,但我想目前为止,我写道:
$dateObject = new DateTime('now');
我的功能是什么,是减去1日从它收到的日期,但因此它减去3个月修改DateInterval构造这样你可以修改它:
$interval = new DateInterval('P3M');
$dateObject->sub($interval);
return $dateObject;
你可以找到在DateInterval构造函数中使用此字符串格式的解释
DateInterval constructor documentation
在那里,你会本身是字母“P”(周期)是强制性的,你在使用int指定周期长度,然后指定期间类型,在几个月的“M”的情况。它看起来好像有在文档中的错误,它说,“M”用于月份和分钟,但它确实可以工作了几个月。如果你需要使用分钟,你必须3分钟指定“PTM”,例如“PT3M”,在表外,它说你必须使用“T”标识的时间间隔。
编辑:要给出一个完整的例子,你必须使用这种格式的完整日期的时间间隔:
$format = 'P1Y2M4DT2H1M40S';
这将代表1年,2个月,4天,2个小时的时间间隔为1分钟40秒
希望这可以帮助别人
<?php
$threemonthsago = mktime(0, 0, 0, date("m")-3, date("d"), date("Y"));
?>
<?php
$date = date_create('2000-01-01');
date_add($date, date_interval_create_from_date_string('10 days'));
echo date_format($date, 'Y-m-d');
?>