PHP strtotime バグへの対処

coldplay.xixi
リリース: 2023-04-08 19:04:01
転載
3850 人が閲覧しました

PHP strtotime バグへの対処

PHP strtotime バグ処理

最近使用した strtotime と -1 month、1 month、next month を組み合わせて前月または来月を取得します月の日付ですが、記事を見て、strtotime を使用して日付を直接取得するのはまだ少しバグがあることに気付きました。

BUG

たとえば、date :

$today = '2020-12-31';
echo date("Y-m-d",strtotime("$today -1 month"))
ログイン後にコピー

出力

2020-12-01
ログイン後にコピー

上記の出力からわかるように、出力はまだ 2020 年 12 月です

分析:

最初の月に -1 を実行すると、現在の月は 07-31 になり、1 を引くと 06-31 になります。

6 月には 31 日がないため、日付の正規化を再度実行します。 2:60 は、6 月 31 日の 3:00 に相当します。7 月 1 日の

に相当します。ロジックは非常に「明確」ですか? 次のように 2 番目のステップを手動で検証することもできます:

var_dump(date("Y-m-d", strtotime("2020-12-31")));
// 输出2020-12-01
ログイン後にコピー

言い換えると、月の大きさに関係する限り、最終日にこのような混乱が生じる可能性があります。この結論を確認するために、他の同様の月も簡単に検証できます:

var_dump(date("Y-m-d", strtotime("-1 month", strtotime("2020-12-31"))));
// 输出2020-12-03
 
var_dump(date("Y-m-d", strtotime("+1 month", strtotime("2020-08-31"))));
// 输出2020-10-01
 
var_dump(date("Y-m-d", strtotime("next month", strtotime("2020-01-31"))));
// 输出2020-03-03
 
var_dump(date("Y-m-d", strtotime("last month", strtotime("2020-03-31"))));
// 输出2020-03-03
ログイン後にコピー

解決策

PHP5 から。3 以降、date には、この問題を明確にするための一連の修正フレーズ、つまり「first day of」と「last day of」が追加されました。これは、日付を制限できることを意味します。

var_dump(date("Y-m-d", strtotime("last day of -1 month", strtotime("2020-03-31"))));
//输出2020-02-28
 
var_dump(date("Y-m-d", strtotime("first day of +1 month", strtotime("2020-08-31"))));
//输出2020-09-01
 
var_dump(date("Y-m-d", strtotime("first day of next month", strtotime("2020-01-31"))));
//输出2020-02-01
 
var_dump(date("Y-m-d", strtotime("last day of last month", strtotime("2020-03-31"))));
//输出2020-02-28
ログイン後にコピー

5.3 より前のバージョンの場合は、mktime などを使用してすべての日を無視できます。たとえば、日付を次のように制限します。毎月 1 日ですが、最初の日を直接使用することをお勧めします。よりエレガントです。

推奨チュートリアル: "PHP ビデオ チュートリアル "

以上がPHP strtotime バグへの対処の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:liqingbo.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート