ホームページ > バックエンド開発 > PHPチュートリアル > [ベスト プラクティス シリーズ] PHP の日付、時刻、タイム ゾーンの処理 API とコンポーネント

[ベスト プラクティス シリーズ] PHP の日付、時刻、タイム ゾーンの処理 API とコンポーネント

WBOY
リリース: 2016-06-20 12:26:17
オリジナル
1301 人が閲覧しました

日付形式、タイムゾーン、閏年、日付が異なる月など、日付と時刻を処理する際には考慮すべき点がたくさんあります。自分で使用する必要があります。 PHP 5.2.0 で導入された DateTime 、 DateIntervel クラス、および DateTimeZone クラスは、日付、時刻、タイム ゾーンの作成と処理に役立ちます。

デフォルトのタイムゾーンを設定します

まず、PHP で日付と時刻を処理する関数のデフォルトのタイムゾーンを設定する必要があります。設定されていない場合、PHP は表示します。 E_WARNING メッセージを設定します。デフォルトのタイムゾーンを設定するには 2 つの方法があり、次のように php.ini で設定できます:

date.timezone = 'Asia/Shanghai';
ログイン後にコピー

date_default_timezone_set() 関数を使用して実行時に設定することもできます。

<?phpdate_default_timezone_set('Asia/Shanghai');
ログイン後にコピー

これら 2 つの方法では、どちらの方法でも有効なタイム ゾーン識別子を使用する必要があります。PHP の完全なタイム ゾーン識別子は、http://php.net/manual/zh/timezones.php で確認できます。 >

DateTime クラス

DateTime クラスは、日付と時刻を管理するためのオブジェクト指向インターフェイスを提供します。DateTime インスタンスは、特定の日付と時刻を表す最も簡単な方法です。新しい DateTime インスタンスを作成するには:

<?php$datetime = new DateTime();
ログイン後にコピー
パラメーターがない場合、DateTime クラスのコンストラクターは現在の日付と時刻を表すインスタンスを作成します。 DateTime クラスのコンストラクターに文字列を渡して日付と時刻を指定できます。

<?php$datetime = new DateTime('2016-06-06 10:00 pm');
ログイン後にコピー

注: 渡される文字列パラメーターは、有効な日付と時刻の形式 (http: //php.net/manual/zh/datetime.formats.php)

理想的には、PHP が理解できる日付と時刻の形式を指定しますが、常にそうとは限りません。この場合、DateTime が提供する静的メソッド createFromFormat を使用して DateTime インスタンスを作成できます。このメソッドの最初のパラメータは、日付と時刻の形式を表す文字列です。 2 番目のパラメータは、この形式を使用する日付と時刻の文字列です。

<?php$datetime = DateTime::createFromFormat('M j, Y H:i:s', 'June 6, 2016 22:00:00');
ログイン後にコピー

注: ご存知かもしれませんが、DateTime::createFromFormat は date 関数に似ています。使用可能な日付と時刻の形式は次の場所にあります: http://php.net/manual/zh/datetime.createfromformat.php

DateInterval class

DateTime の処理 インスタンスを使用する前に、DateInterval クラスを理解する必要があります。DateInterval インスタンスは、固定長の期間 (2 日など) または相対的な期間 (昨日など) を表します。このクラスの DateTime インスタンスを変更します。たとえば、DateTime は、DateTime インスタンスを処理するための add メソッドと sub メソッドを提供します。これら 2 つのメソッドのパラメータは、DateTime に加算または減算される時間を表す DateInterval インスタンスです。

DateInterval インスタンスをインスタンス化するためにコンストラクターを使用します。DateInterval コンストラクターのパラメーターは、文字 P で始まり、その後に整数、最後にピリオドが続く時間間隔の一致を表す文字列です。識別子。前の整数を制限します。有効な期間識別子は次のとおりです。

    Y (年)
  • M (月)
  • D (日)
  • W (週)
  • H (時間)
  • M (分)
  • S (秒)
間隔合意には、時刻と日付の両方を含めることができます。時間がある場合は、日付と時刻の間に文字 T を追加する必要があります。たとえば、間隔規則 P2D は 2 日の間隔を意味し、間隔規則 P2DT5H2M は 2 日 5 時間 2 分を意味します。

次の例は、add メソッドを使用して、DateTime インスタンスによって表される日付と時刻を一定期間だけ戻す方法を示しています。

<?php//创建DateTime实例$datetime = new DateTime('2016-06-06 22:00:00');//创建长度为两天的间隔$interval = new DateInterval('P2D');//修改DateTime实例$datetime->add($interval);echo $datetime->format('Y-m-d H:i:s');
ログイン後にコピー
逆の DateInterval を作成することもできます。インスタンス:

<?php$datetime = new DateTime();$interval = DateInterval::createFromDateString('-1 day');$period = new DatePeriod($datetime, $interval, 3);foreach ($period as $date) {    echo $date->format('Y-m-d'), PHP_EOL;}
ログイン後にコピー
上記のコードの出力は次のとおりです:

2016-06-062016-06-052016-06-042016-06-03
ログイン後にコピー

DateTimeZone クラス

PHP は DateTimeZone クラスを使用して有効なタイム ゾーンを識別するだけで済みます。シンボルは DateTimeZone クラスのコンストラクターに渡されます。

<?php$timezone = new DateTimeZone('Asia/Shanghai');
ログイン後にコピー
DateTime インスタンスを作成するには、通常、2 番目の DateTimeZone インスタンスを使用する必要があります。 DateTime クラス コンストラクターのパラメーター (オプション) は DateTimeZone インスタンスです。このパラメーターを渡した後、DateTime インスタンスの値とこの値へのすべての変更は、この指定されたタイム ゾーンに基づいて設定されます。以前は使用されます:

<?php$timezone = new DateTimeZone('Asia/Shanghai');$datetime = new DateTime('2016-06-06', $timezone);
ログイン後にコピー
インスタンス化後に setTimezone を使用して、DateTime インスタンスのタイムゾーンを変更するメソッド:

<?php$timezone = new DateTimeZone('Asia/Shanghai');$datetime = new DateTime('2016-06-06', $timezone);$datetime->setTimezone(new DateTimeZone('Asia/Hong_kong'));
ログイン後にコピー

DatePeriod クラス

一定期間内に繰り返し現れる一連の日付と時刻を繰り返し処理する必要がある場合、DatePeriod クラスはこの問題を解決するために (以前に使用されています)、DatePeriod クラスのコンストラクターは 3 つのパラメーターを受け入れます。すべてを指定する必要があります:

  • 一个DateTime实例,表示迭代开始的日期和时间
  • 一个DateInterval实例,表示下一个日期和时间的间隔
  • 一个整数,表示迭代的总次数

DatePeriod是迭代器,每次迭代都会产出一个DateTime实例。DatePeriod的第四个参数是可选的,用于显式指定周期的结束日期和时间,如果迭代时想要排除开始日期和时间,可以把构造方法的最后一个参数设为 DatePeriod::EXCLUDE_START_DATE常量:

<?php$datetime = new DateTime();$interval = new DateInterval('P2D');$period = new DatePeriod($datetime, $interval, 3, DatePeriod::EXCLUDE_START_DATE);foreach ($period as $date) {    echo $date->format('Y-m-d H:i:s'), PHP_EOL;}
ログイン後にコピー

打印的结果是:

2016-06-082016-06-102016-06-12
ログイン後にコピー

nesbot/carbon日期组件

如果经常需要处理日期和时间,应该使用 nesbot/carbon组件( https://github.com/briannesbitt/Carbon),Laravel框架也是使用了这个组件处理日期和时间,该组件集成了常用的日期及时间处理API,其底层正是使用了我们上面提到的几个日期时间处理类实现了各种功能,有兴趣可以去研究下。

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