PHP:最简单的方法来获取第一个月前6个月的月份日期?

sto*_*ist 31 php datetime subtraction

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

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

Adn*_*nan 69

嗯,也许是这样的;

echo date("F 1, Y", strtotime("-6 months"));
Run Code Online (Sandbox Code Playgroud)

编辑;

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

echo date("F, 1 Y", strtotime("-6 months", strtotime("Feb 2, 2010")));
Run Code Online (Sandbox Code Playgroud)

  • 除了逗号位于格式字符串中的错误位置之外,这看起来是最好的解决方案(现在,它显示"2009年10月1日"而不是"2009年10月1日"). (2认同)
  • @Adnan,不要忘记你可以将这两个调用合并到`strtotime` (2认同)

kni*_*ttl 9

使用的组合mktimedate:

$date_half_a_year_ago = mktime(0, 0, 0, date('n')-6, 1, date('y'))
Run Code Online (Sandbox Code Playgroud)

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

$given_timestamp = getSomeDate();
$date_half_a_year_ago = mktime(0, 0, 0, date('n', $given_timestamp)-6, 1, date('y', $given_timestamp))
Run Code Online (Sandbox Code Playgroud)

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

echo date('F j, Y', $date_half_a_year_ago);
Run Code Online (Sandbox Code Playgroud)


Eri*_*c G 9

有点hackish但工作:

<?php

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

?>
Run Code Online (Sandbox Code Playgroud)

  • 哦,嘿,我没有意识到DateTime的构造函数接受了-6个月.我现在觉得很蠢. (2认同)