16

我有这种格式的日期(YYYYMM):

201201  // Gen, 2012
201202  // Feb, 2012
201203  // ecc

假设从 201203 开始​​,我想减去 4 个月。我不能这样做201203 - 4,因为它是=201199

201203 - 4应该输出201111(2011 年 11 月)

也许我应该将我的字符串转换为日期,然后用-4个月将其传递给strtotime?

有什么建议吗?

4

8 回答 8

38

您可以strtotime在 PHP 中使用:

$date = strtotime('2012-05-01 -4 months');

这篇文章会帮助你。

于 2012-05-17T10:25:27.620 回答
9

strtotime()可以做到,但您需要添加一个月中的一天才能解析日期:

$input = '201203';

$input .= '01';

$date = strtotime($input .' -4 months');

echo date('Ym', $date);

2011 年 11 月的产出:

201111
于 2012-05-17T10:30:30.020 回答
8

除了strtotime版本之外,从 PHP 5.3 开始,您还可以使用DateTimeand DateInterval

$date = DateTime::createFromFormat("Ym", "201201");
$interval = new DateInterval("P4M"); // 4 months
$fourMonthsEarlier = $date->sub($interval);
echo $fourMonthsEarlier->format("Ym");
于 2012-05-17T10:35:36.993 回答
2

Final_date = 当前日期 - 4 个月

<?php
$current_date = date("Y-m-d");

$final_date = date("Y-m-d", strtotime($current_date." -4 months"));

echo $final_date;
于 2018-09-04T11:36:20.463 回答
1

对于 EX $da=2014-04-01

如果你想减 6 个月使用这个..

$date = strtotime($da .' -4 months');
$final=date('Y-m-d', $date);

回声$最终;

于 2014-04-17T08:10:42.537 回答
0

您可以使用strtotime将字符串转换为 UNIX 时间戳,以秒为单位。time()将为您提供当前的 UNIX 时间戳。减去它们得到日期的几秒钟,然后除以60*60*24得到它的天数

于 2012-05-17T10:25:25.313 回答
0

以前的代码不起作用:

$da='2014-08-29';
$date = strtotime($da .' -6 months');
$final=date('Y-m-d', $date);
echo $final;
$date = strtotime($da .' -7 months');
$final=date('Y-m-d', $date);
echo $final;

二月不见了!

于 2014-08-29T12:14:57.447 回答
-1
$date = '2016-09-01 00:00:00.000000';

$date2 = date("Y-m-d H:i:s.u", strtotime($date." -4 months"));

echo $date2; 

运行此代码,您将获得 2016-05-01 00:00:00.000000

于 2016-09-15T12:36:51.660 回答