假设日期为:
$date = "2011-08-28";
需要在$date
之前3个月计算 - 如何才能完成?
答案 0 :(得分:15)
$new_timestamp = strtotime('-3 months', strtotime($date));
然后,您可以使用带有php date()功能的新时间戳来显示您希望的新日期,例如:
echo date("Y-m-d",$new_timestamp);
答案 1 :(得分:11)
对我来说,这种方式更好,因为代码更具可读性。
$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');
答案 2 :(得分:3)
编辑:正如calumbrodie所指出的,您可以使用sub方法而不是反转间隔并将其添加到日期对象
我试图做一些类似于原始问题的事情。我需要从DateTime对象中减去1天。我知道其他解决方案有效,但这是另一种我更喜欢的方式。我用过这个函数:
function getPreviousDay($dateObject){
$interval = new DateInterval('P1D');
$dateObject->sub($interval);
return $dateObject;
}
$ dateObject是一个DateTime对象,可以有任何你想要的日期,但是因为我想要当前的日期,我写道:
$dateObject = new DateTime('now');
我的函数做了什么,从它收到的日期开始减去1天,但是你可以修改它,这样它就减去3个月修改DateInterval构造函数,如下所示:
$interval = new DateInterval('P3M');
$dateObject->sub($interval);
return $dateObject;
您可以在这里找到DateInterval构造函数中使用的字符串格式的解释
DateInterval constructor documentation
在那里你会发出那个字母'P'(句号)是强制性的,你使用int来指定句号长度,然后在月'M'的情况下指定句号类型。看起来好像文档中有错误,它说“ M ”用了几个月和几分钟,但它确实有效数月。如果您需要使用分钟,您必须指定“PTM”,例如“PT3M”3分钟,在表格之外它表示您必须使用“T”标识符作为时间间隔。
编辑: 要给出完整的示例,您必须使用此格式作为完整的日期时间间隔:
$format = 'P1Y2M4DT2H1M40S';
这将代表1年,2个月,4天,2小时,1分40秒的间隔
希望这有助于某人
答案 3 :(得分:2)
<?php
$threemonthsago = mktime(0, 0, 0, date("m")-3, date("d"), date("Y"));
?>
答案 4 :(得分:0)
<?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');
?>