したがって、今日が2010年4月12日だった場合、2009年10月1日を返します。
私がググったいくつかの可能な解決策は過度に複雑に見えます、何か提案はありますか?
うーん、たぶんこんな感じ。
echo date("F 1, Y", strtotime("-6 months"));
編集;
カスタム日付の使用を指定する場合。
echo date("F, 1 Y", strtotime("-6 months", strtotime("Feb 2, 2010")));
$date_half_a_year_ago = mktime(0, 0, 0, date('n')-6, 1, date('y'))
新しい日付を今日ではなく特定の日付に相対的にするには、2番目のパラメータを指定して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);
少しハッキーですが動作します:
<?php
$date = new DateTime("-6 months");
$date->modify("-" . ($date->format('j')-1) . " days");
echo $date->format('j, F Y');
?>
コメントで議論されましたが、受け入れられた回答には不要な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');
_