【发布时间】:2011-08-15 18:05:54
【问题描述】:
假设日期是:
$date = "2011-08-28";
它需要计算$date 之前的 3 个月 - 那怎么做?
【问题讨论】:
标签: php date date-format
假设日期是:
$date = "2011-08-28";
它需要计算$date 之前的 3 个月 - 那怎么做?
【问题讨论】:
标签: php date date-format
$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');
【讨论】:
edit:正如 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 秒的间隔
希望这对某人有所帮助
【讨论】:
<?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');
?>
【讨论】: