ホームページ >バックエンド開発 >PHPチュートリアル >strtotime('- x month') バグに対する PHP の解決策
以前にプロジェクトを開発したときに、strtotime("- 1 month") を使用するとバグが発生しました。主な理由は、PHP によって設定されるデフォルトの時間がグリニッジ タイム ゾーンに基づいているためです。この問題を解決するには 2 つの方法があります。 php.ini でデフォルトのタイムゾーンを変更する方法と、プログラムで設定する方法です
まずは最初の方法について話しましょう。php.ini でデフォルトのタイムゾーンを変更します
私は wamp 統合環境を使用しています。以前使用していましたが、bin/php/php5.5.12 でデフォルトのタイムゾーンを変更していると思っていましたが、どのように変更してもグリニッジタイムゾーンの時間が表示され、対応する解決策がオンラインで見つかりませんでした。その後、bin/apache/apache2.4.9 で php.ini ファイルを見つけて、そのファイルのタイムゾーンを date.timezone = PRC に設定しました。すると、ページに表示される時間が同じになります。私のシステム時間。
設定方法は、php.ini ファイルのタイムゾーンを地域の時間に変更することです。たとえば、date.timezone = PRC を変更すると、時間を中華人民共和国の時間に設定することになります。注: 設定したタイムゾーンを有効にするには、前にある ; を削除する必要があります。
2番目の方法は、 date_default_timezone_set('PRC');
のような
date_default_timezone_set('PRC');//この文は時差を解消するために使用されます
$date = date( " Y-m-d H:i:s");
echo $date; //Output
?>
このようにして、現在時刻を出力できます。
時刻が 2016-03-31 の場合、上記の方法を使用して前月の時刻を取得すると、取得される時刻は依然として 2016-03 になります。最初に前月の日数を検索し、次に今日の時刻を使用して前月の日数を減算します。
望ましい結果を達成するのに役立つメソッドが以下にいくつかあります。たとえば、先月の月を返したいとします。
echo date('Y-m', strtotime('midnight first day of -1 month') ));
または:
echo date('Y-m', strtotime(date('Y-m-01')) – 86400);
またはプログラム内で次の処理を行います
date_default_timezone_set( 'アジア/上海' );
$first_day_of_month = date('Y-m',time()) '-01 00:00:01';
$t = strtotime($first_day_of_month);
print_r(array(
date('Y年m月',$t),
date('Y年m月',strtotime('-1ヶ月',$t)),
date('Y年m月',strtotime(' - 2 month', $t)),
));
?>
これを行う原則は、各月の時刻を年と月で区切ってから、日、時、分、秒を追加することです。 strtotime('- 1 month',$t) 操作を行うと、前月の時刻を表示できます。
別の注意:
時刻処理に strtotime(date("Y-m-d h:i:s")) を使用する場合、ここでの文字は大文字と小文字が区別され、
h は大文字と小文字が区別され、小文字の h は時間を出力します。タイムゾーンは、17時が5時です。大文字の H は 17、
を出力し、年 y は大文字と小文字が区別され、小文字の y は 13 を出力します。 Capital Y の 2013 年の出力。