如何从一个日期移除3个月?

问题描述 投票:6回答:5

假定日期为:

$date = "2011-08-28";

它需要计算3个月之前的$date - 这怎么办呢?

php date date-format
5个回答
15
投票
$new_timestamp = strtotime('-3 months', strtotime($date));

然后,您可以使用新的时间戳与PHP date()函数来显示你多么希望,例如新的日期:

echo date("Y-m-d",$new_timestamp);

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');

3
投票

编辑:正如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秒

希望这可以帮助别人


2
投票
<?php
$threemonthsago = mktime(0, 0, 0, date("m")-3, date("d"),   date("Y"));
?>

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');
?>
© www.soinside.com 2019 - 2024. All rights reserved.