ホームページ > バックエンド開発 > PHPチュートリアル > ところで、php にバグを見つけましたか?翌月の末日を計算してみましょう!

ところで、php にバグを見つけましたか?翌月の末日を計算してみましょう!

WBOY
リリース: 2016-06-23 13:36:03
オリジナル
1098 人が閲覧しました

早速、コードに進みましょう:

$BeginDate="2015-05-31";//新的获取指定月份的最后1天echo date("Y-m-t",strtotime("+1 months",strtotime($BeginDate)));
ログイン後にコピー


経験によると、計算結果は次のようになります: 2015-06-30

しかし、実際の実行結果はそうではありません。試して、なぜこれになるのかを皆さんに聞いてください。 ~~~ ~混乱しました

もう一つ: 開始時刻が 2015-05-30 に設定されている場合、計算結果は正しいです


ディスカッションへの返信 (解決策)

$BeginDate="2015-05-31";echo date("Y-m-d t",strtotime("+1 months $BeginDate"));
ログイン後にコピー
ログイン後にコピー
2015-07-01 31

質問は ?
5月31日プラス1ヶ月(6月は30日)だから7月1日じゃないですか
あなたの経験に何か問題があるようです

ああ、勉強になりました
と思いました。その +1 か月は今月の次の月でした

もしそうなら、php にまだバグがあると思います。この場合、1 ずつ進むのではなく、6 月の最終日に戻るはずです

あなたは、それは間違って理解しました! !
翌月の最終日に別の構文を取得します。

はは、1か月追加すると、7月1日になるはずです。
あなたの論理によれば、1 日追加しても 5 月 31 日と同じになりますか?

バグ?それはあなたがロジックをうまく処理できていないからです

月末を取得するには、通常、翌月の 1 日を使用し、そこから 1 日を減算します

アルゴリズムを自分で変更したので、問題は非常にうまく解決されました
多くの方法がありますが、私はまだこれを主張しています。同じ投稿者が言ったように、5月は31日なので、+1か月は6月31日ですが、6月は30日なので、結果は次のようになります。 7 月 1 日、この strtotime の +1 か月はバグです。

自分で変更する方法は次のとおりです:

$begindate="2015-05-31";$enddate=date("Y-m-01",strtotime($begindate));//获得月初$enddate=date("Y-m-t 23:59:59",strtotime("$enddate +1 month"));//月初加1 month然后计算月末最后一天
ログイン後にコピー

$BeginDate="2015-05-31";echo date("Y-m-d t",strtotime("+1 months $BeginDate"));
ログイン後にコピー
ログイン後にコピー
2015-07-01 31

ご質問はありますか?
5 月 31 日プラス 1 か月 (6 月は 30 日) なので、7 月の最終日は 31 日ではありませんか?
あなたの経験に何か問題があるようです



PHP で 1 つ追加してください。月は計算されますか? 5 月 31 日と 1 か月を単純にすると、5 月 + 1 = 6 月 31 日になりますか?そうすると6月31日は存在しないので計算結果は7月31日になるのでしょうか?

5月31日プラス1日加えると5月32日になりますが、5月32日が無い場合は6月1日になるのでしょうか?

これを正しく理解していますか?

はい
ただし、注意してください: これは PHP のルールではなく、英語での時間計算のルールです

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