web-dev-qa-db-ja.com

PHP:最初に6か月前の日付を取得する最も簡単な方法は?

したがって、今日が2010年4月12日だった場合、2009年10月1日を返します。

私がググったいくつかの可能な解決策は過度に複雑に見えます、何か提案はありますか?

34
stormist

うーん、たぶんこんな感じ。

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

編集;

カスタム日付の使用を指定する場合。

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

mktimedate の組み合わせを使用します:

$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);
9
knittl

少しハッキーですが動作します:

<?php

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

?>
9
Eric G

コメントで議論されましたが、受け入れられた回答には不要な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');
_
2
billynoah