先週の3月を表示したいです。私は次のコードを使用しています、
date("Y-m-d",strtotime("last March"));
提案や参考資料は非常に役立ちます。
$year = date('Y');
if (date('n') < 3) {
$year--;
}
$beginningOfLastMarch = mktime(0, 0, 0, 3, 1, $year);
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
これを行うためのより良い方法を見つけましたが、特定のユースケースで一部の人々にまだ関連している可能性があるため、古いソリューションを一番下に残しました.
私の問題に対するより良い解決策を見つけました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
かなり近いです。必要なのは日を変えることだけです。
strtotime
time()
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}
これを改善するには追加の作業が必要になる場合がありますが、ここですぐに公開したかったので、他の人がこの質問に到達するのに役立つかもしれません