【发布时间】:2011-02-07 04:51:40
【问题描述】:
如果今天是 2010 年 4 月 12 日 它应该在 2009 年 10 月 1 日返回
我用谷歌搜索的一些可能的解决方案似乎过于复杂,有什么建议吗?
【问题讨论】:
标签: php datetime subtraction
如果今天是 2010 年 4 月 12 日 它应该在 2009 年 10 月 1 日返回
我用谷歌搜索的一些可能的解决方案似乎过于复杂,有什么建议吗?
【问题讨论】:
标签: php datetime subtraction
嗯,大概是这样的;
echo date("F 1, Y", strtotime("-6 months"));
编辑;
如果您想指定自定义日期使用;
echo date("F, 1 Y", strtotime("-6 months", strtotime("Feb 2, 2010")));
【讨论】:
strtotime
有点 hackish 但有效:
<?php
$date = new DateTime("-6 months");
$date->modify("-" . ($date->format('j')-1) . " days");
echo $date->format('j, F Y');
?>
【讨论】:
new DateTime('first day of this month - 6 months')
$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);
【讨论】:
在 cmets 中进行了讨论,但接受的答案有一些不需要的 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');
【讨论】: