0

先週の3月を表示したいです。私は次のコードを使用しています、

 date("Y-m-d",strtotime("last March"));

提案や参考資料は非常に役立ちます。

4

3 に答える 3

6
$year = date('Y');
if (date('n') < 3) {
    $year--;
}

$beginningOfLastMarch = mktime(0, 0, 0, 3, 1, $year);
于 2012-04-09T05:15:00.160 に答える
2

http://php.net/dateを参照してください

date('M')

また

date('n')

また

date('m')

または、日付がある場合

$mydate = "2010-05-12 13:57:01";

あなたはこのようになることができます

$month = date("m",strtotime($mydate));

m先行ゼロ01から12までの月の数値表現

n先行ゼロなしの月の数値表現1から12

于 2012-04-09T05:01:21.363 に答える
0

これを行うためのより良い方法を見つけましたが、特定のユースケースで一部の人々にまだ関連している可能性があるため、古いソリューションを一番下に残しました.

私の問題に対するより良い解決策を見つけましたstrtotime. を選択したいとします4th of March last year。私はただします:

strtotime('{THIS_YEAR}-03-04 last year');

明らかに、この文字列を処理する前に{THIS_YEAR}date('Y'). これは、必要な値をハードコーディングしているという理由だけで機能します。03-04として4th of March。これらの数字は好きな日付に置き換えることができます。

古いソリューション


私は自分に合った解決策を見つけましたが、複雑なアルゴリズムなどを書く必要はありません。ただし、構文をわずかに拡張する必要がstrtotimeあります。

PHPは (すべてのユースケースで) 完璧ではありませんが、 を組み合わせると非常に強力になることがstrtotimeわかりました。strtotime

を選択したい場合、4th of last month実際にはそれはできません...strtotimeは序数を実際には受け入れません。いいえ4th

しかし、first day of last monthかなり近いです。必要なのは日を変えることだけです。

strtotimetime()2 番目の引数として a を渡すことができます。strtotimeこれは、次のようにチェーンできることを意味します。

$time = time();
$time = strtotime('first day of last month', $time);
$time = strtotime('+3 days', $time);
echo date('Y-m-d H:i', $time);

// I know we don't really need the initial `$time = time()`. It is there for clarity

これにより、適切な時間が得られます: 4th of last month.

ここで、ちょっとしたシンタックス シュガーの出番です...

strtotime区切り記号で区切られた部分的な文字列を受け入れる関数を書くことができます:

function my_strtotime($str, $time = null, $delim = '|'){
    $time = ($time==null ? time() : $time);
    foreach(explode($delim, $str) as $cmd){
        $time = strtotime($cmd, $time);
    }
    return $time;
}

次のように使用できます。

$str = 'first day of last month | +3 days';
echo date('Y-m-d H:i', my_strtotime($str));

そして、それがあります。4th of last month.

余分な空白は既に処理されてexplodeいるため、呼び出しから空白を削除する必要はありません。strtotime

last year | first day of March | +9 days | 14:00これは、常に を返すような複雑な間隔を処理できます10th of March at 2pm last year

これの最も良い点はlast year | first day of March | +9 days | 14:00、EG のような文字列を必要な値で生成できることです。

last year | first day of {MONTH} | +{DAYS-1} days | {TIME}

これを改善するには追加の作業が必要になる場合がありますが、ここですぐに公開したかったので、他の人がこの質問に到達するのに役立つかもしれません

于 2016-01-15T11:01:43.157 に答える