ホームページ >バックエンド開発 >PHPチュートリアル >PHPの時刻関数strtotime()関数の原理の説明
この記事では、PHP の時間関数 strtotime() の原理を紹介します。これには一定の参考値があります。必要な友人は参照してください。お役に立てれば幸いです。
strtotime を -1 か月、1 か月、来月と組み合わせるとよく混乱し、この関数は少し信頼性が低く、あらゆる場面で問題が発生する可能性があると感じます。非常にパニックです...
いいえ、誰かがもう一度私に尋ねました:
// 今天是2018-07-31 执行代码:date("Y-m-d",strtotime("-1 month"))// 怎么输出是2018-07-01?
わかりました、この質問は混乱しているように見えますが、内部ロジックからすると、実際には「正しい」です。心配しないでください、ゆっくり説明しましょう:
この種の日付の内部処理ロジックをシミュレートしましょう:
1. 最初に -1 か月を実行し、その後、現在時刻は 07-31 になります1 を引くと、06-31.
2 になります。6 月には 31 日がないため、日付の正規化を再度実行します。そのため、2:60 が 6 月 31 日の 3:00 に等しいかのようになります。 7 月 1 日と同じです
ロジックは非常に「明確」ですか? 次のような 2 番目のステップを手動で検証することもできます:
var_dump(date("Y-m-d", strtotime("2017-06-31")));// 输出2017-07-01
つまり、大月と小月の最終日が関係する限り、これがある可能性があります。混乱しています、私たちも同様です。同様の他の月も簡単に検証でき、この結論を確認できます:
var_dump(date("Y-m-d", strtotime("-1 month", strtotime("2017-03-31"))));// 输出2017-03-03 var_dump(date("Y-m-d", strtotime("+1 month", strtotime("2017-08-31"))));// 输出2017-10-01 var_dump(date("Y-m-d", strtotime("next month", strtotime("2017-01-31"))));// 输出2017-03-03 var_dump(date("Y-m-d", strtotime("last month", strtotime("2017-03-31"))));// 输出2017-03-03
何をすべきですか?
PHP5.3 以降、明確にするために date に一連の修正フレーズが追加されました。この問題は「最初の日」と「最後の日」です。つまり、日付が自動的に「正規化」されないように制限できます。
var_dump(date("Y-m-d", strtotime("last day of -1 month", strtotime("2017-03-31"))));//输出2017-02-28 var_dump(date("Y-m-d", strtotime("first day of +1 month", strtotime("2017-08-31"))));////输出2017-09-01 var_dump(date("Y-m-d", strtotime("first day of next month", strtotime("2017-01-31"))));////输出2017-02-01 var_dump(date("Y-m-d", strtotime("last day of last month", strtotime("2017-03-31"))));////输出2017-02-28
つまり、5.3 より前のバージョンの場合 (まだ使用している人はいますか? ?)、mktime などを使用して、すべての日を無視することもできます。たとえば、毎月 1 日に限定することもできますが、初日を直接使用するほどエレガントではありません。
さあ、内部原理を理解すれば、もう慌てることはありません?
おすすめ関連記事:
isset() 関数と関数の機能の分析と簡単な分析php Compare の empty() 関数
#php 配列関数の操作は何ですか? PHP配列関数の応用(コード付き)
以上がPHPの時刻関数strtotime()関数の原理の説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。