37

因此,如果今天是 2010 年 4 月 12 日,它应该返回 2009 年 10 月 1 日

我用谷歌搜索的一些可能的解决方案似乎过于复杂,有什么建议吗?

4

4 回答 4

78

嗯,也许是这样的;

echo date("F 1, Y", strtotime("-6 months"));

编辑;

如果您想指定自定义日期使用;

echo date("F, 1 Y", strtotime("-6 months", strtotime("Feb 2, 2010")));
于 2010-04-12T21:16:17.240 回答
11

有点hackish但有效:

<?php

$date = new DateTime("-6 months");
$date->modify("-" . ($date->format('j')-1) . " days");
echo $date->format('j, F Y');

?>
于 2010-04-12T21:13:51.503 回答
9

使用mktime和的组合date

$date_half_a_year_ago = mktime(0, 0, 0, date('n')-6, 1, date('y'))

要使新日期相对于给定日期而不是今天,请date使用第二个参数调用

$given_timestamp = getSomeDate();
$date_half_a_year_ago = mktime(0, 0, 0, date('n', $given_timestamp)-6, 1, date('y', $given_timestamp))

要将其格式化输出,只需date再次使用:

echo date('F j, Y', $date_half_a_year_ago);
于 2010-04-12T21:13:02.017 回答
3

它在评论中进行了讨论,但接受的答案有一些不需要的strtotime()电话。可以简化为:

date("F 1, Y", strtotime("Feb 2, 2010 - 6 months"));

此外,您可以DateTime()像这样使用它,我认为它同样具有可读性:

(new DateTime('Feb 2, 2010'))->modify('-6 months')->format('M 1, Y');

或者使用静态方法....

DateTime::createFromFormat('M j, Y','Feb 2, 2010')
    ->modify('-6 months')
    ->format('M 1, Y');
于 2018-10-05T22:21:55.697 回答