[ベスト プラクティス シリーズ] PHP の日付、時刻、タイム ゾーンの処理 API とコンポーネント
日付形式、タイムゾーン、閏年、日付が異なる月など、日付と時刻を処理する際には考慮すべき点がたくさんあります。自分で使用する必要があります。 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();
<?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 (秒)
次の例は、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');
<?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');
<?php$timezone = new DateTimeZone('Asia/Shanghai');$datetime = new DateTime('2016-06-06', $timezone);
<?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,其底层正是使用了我们上面提到的几个日期时间处理类实现了各种功能,有兴趣可以去研究下。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

セッションハイジャックは、次の手順で達成できます。1。セッションIDを取得します。2。セッションIDを使用します。3。セッションをアクティブに保ちます。 PHPでのセッションハイジャックを防ぐための方法には次のものが含まれます。1。セッション_regenerate_id()関数を使用して、セッションIDを再生します。2。データベースを介してストアセッションデータを3。

PHP開発における固体原理の適用には、次のものが含まれます。1。単一責任原則(SRP):各クラスは1つの機能のみを担当します。 2。オープンおよびクローズ原理(OCP):変更は、変更ではなく拡張によって達成されます。 3。Lischの代替原則(LSP):サブクラスは、プログラムの精度に影響を与えることなく、基本クラスを置き換えることができます。 4。インターフェイス分離原理(ISP):依存関係や未使用の方法を避けるために、細粒インターフェイスを使用します。 5。依存関係の反転原理(DIP):高レベルのモジュールと低レベルのモジュールは抽象化に依存し、依存関係噴射を通じて実装されます。

phpstormでCLIモードをデバッグする方法は? PHPStormで開発するときは、PHPをコマンドラインインターフェイス(CLI)モードでデバッグする必要がある場合があります。

システムが再起動した後、UnixSocketの権限を自動的に設定する方法。システムが再起動するたびに、UnixSocketの許可を変更するために次のコマンドを実行する必要があります:sudo ...

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

記事では、入力検証、認証、定期的な更新など、脆弱性から保護するためのフレームワークの重要なセキュリティ機能について説明します。
