如何从约会中删除3个月?

时间:2011-08-15 18:05:55

标签: php date date-format

假设日期为:

$date = "2011-08-28";

需要在$date之前3个月计算 - 如何才能完成?

5 个答案:

答案 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');
?>