ホームページ >バックエンド開発 >PHPチュートリアル >PHPおよびMySQLで日付と時間を操作します
、time()
、およびmktime()
)とそれらのオブジェクト指向のカウンターパートの基本を紹介し、MySQLの日付について学び、PHPで完全に動作させる方法を示します。 date()
メインゲイン
time()
、mktime()
などのPHPの強力な日付および時刻関数を使用して、UNIXタイムスタンプとフォーマットされた日付を効率的に処理します。 date()
DateTime
オブジェクトを使用します。 DateTimeZone
MySQLの日付をUNIXタイムスタンプとして保存して、異なるタイムゾーン間の一貫性を維持し、PHPの日付/時刻関数を使用して変換とフォーマットを維持します。
は、パラメーターを受け入れず、UNIXエポック以来秒数を返します。これを説明するために、PHP Interactive CLIシェルを使用します。
unix時間の配列表現が必要な場合は、関数を使用します。オプションのUNIXタイムスタンプパラメーターを受け入れますが、デフォルトではtime()
の値になります。
<code class="language-bash">sean@beerhaus:~$ php -a php > print time(); 1324402770</code>
getdate()
Format unix time time() unix時間は、人間が読みたい任意の文字列に簡単にフォーマットできます。
<code class="language-php">php > $unixTime = time(); php > print_r(getdate($unixTime)); Array ( [seconds] => 48 [minutes] => 54 [hours] => 12 [mday] => 20 [wday] => 2 [mon] => 12 [year] => 2011 [yday] => 353 [weekday] => Tuesday [month] => December [0] => 1324403688 )</code>の値が使用されます。
<code class="language-bash">sean@beerhaus:~$ php -a php > print time(); 1324402770</code>
"r"フォーマット文字列RFC 2822で指定されたフォーマット時間を返します。もちろん、他の仕様を使用して、独自のカスタム形式を定義できます。
<code class="language-php">php > $unixTime = time(); php > print_r(getdate($unixTime)); Array ( [seconds] => 48 [minutes] => 54 [hours] => 12 [mday] => 20 [wday] => 2 [mon] => 12 [year] => 2011 [yday] => 353 [weekday] => Tuesday [month] => December [0] => 1324403688 )</code>
許容されるフォーマットされた文字の完全なリストについては、PHPドキュメントのdate()
のページを参照してください。ただし、次の例で表示されるように、mktime()
およびstrtotime()
関数と組み合わせて使用すると、関数がより便利になります。
指定された時間に基づいてUNIX時間を作成します
mktime()
は、日付の各部分に対応する値(秒、分、時間、年など)のリストに基づいてUNIXタイムスタンプを作成するために使用されます。日付の各部分を次の順序で設定する多くの整数パラメーターを受け入れます。
<code class="language-php">php > print date("r", $unixTime); Tue, 20 Dec 2011 12:54:48 -0500</code>夏時間が有効になっていない場合は、
を1に設定します。 isDST
<code class="language-php">php > print date("m/d/y h:i:s a", $unixTime); 12/20/11 12:54:48 pm php > print date("m/d/y h:i:s a"); 12/20/11 01:12:11 pm php > print date("jS of F Y", $unixTime); 20th of December 2011</code>ユーザー定義の日付範囲を使用してデータベースクエリを処理するときに
が非常に役立つことがわかります。たとえば、タイムスタンプをMySQLに整数(UNIX TIME)として保存する場合(誰もが予言しますか?)、一般的な年間のクエリ範囲を簡単に設定できます。 mktime()
<code>mktime(hour, minute, second, month, day, year, isDST)</code>
英語の日付を解決する時間を解決
ほぼ魔法の関数最初の引数として日付/時刻形式で文字列を使用し、変換の基礎として使用されるUNIXタイムスタンプを使用します。許容される日付形式については、ドキュメントを参照してください。 strtotime()
<code class="language-php">php > print date("r", mktime(12, 0, 0, 1, 20, 1987)); Tue, 20 Jan 1987 12:00:00 -0500 php > print date("r", mktime(0, 0, 0, date("n"), date("j"), date("Y"))); Tue, 20 Dec 2011 00:00:00 -0500 php > print date("r", mktime(23, 59, 59, date("n"), date("j"), date("Y"))); Tue, 20 Dec 2011 23:59:59 -0500</code>
phpのdatetime and datetimezoneオブジェクト
PHPのオブジェクトは、日付とタイムゾーンを処理するオブジェクト指向の方法です。コンストラクターは、上記の文字列表現を上記のDateTime
と非常によく似ており、一部の人々は使いやすいと感じるかもしれません。パラメーターが提供されていない場合、デフォルト値は「Now」です。 strtotime()
<code class="language-php"><?php $startTime = mktime(0, 0, 0, 1, 1, date("y")); $endTime = mktime(0, 0, 0, date("m"), date("d"), date("y"));</code>
のformat()
関数と同じように機能し、同じフォーマットされたすべての文字を受け入れます。 date()
オブジェクトには、DateTime
メソッドに供給できるいくつかの便利な定数が付属しています。 format()
<code class="language-php">php > print strtotime("now"); 1324407707 php > print date("r", strtotime("now")); Tue, 20 Dec 2011 14:01:51 -0500 php > print strtotime("+1 week"); 1325012569 php > print date("r", strtotime("+1 week")); Tue, 27 Dec 2011 14:03:03 -0500 php > print date("r", strtotime("next month")); Fri, 20 Jan 2012 14:04:20 -0500 php > print date("r", strtotime("next month", mktime(0, 0, 0))); Fri, 20 Jan 2012 00:00:00 -0500 php > print date("r", strtotime("next month", mktime(0, 0, 0, 1, 31))); Thu, 03 Mar 2011 00:00:00 -0500</code>定数の完全なリストは、
ドキュメントページにあります。すぐにタイムゾーンを扱うので、PHPのデフォルトタイムゾーンを提供しましょう。 php.ini構成ファイル(CLI用に1つ、Apache用のファイルがあります)で、以下に示すセクションを見つけます:DateTime
<code class="language-php">php > $dt = new DateTime("now"); php > print $dt->format("r"); Tue, 20 Dec 2011 16:28:32 -0500 php > $dt = new DateTime("December 31 1999 12:12:12 EST"); php > print $dt->format("r"); Fri, 31 Dec 1999 12:12:12 -0500</code>に割り当てられていない場合、PHPはサーバーに設定されたシステムタイムゾーンを決定するために最善を尽くします。
を使用して、PHPが使用している値を確認できます。 date.timezone
<code class="language-bash">sean@beerhaus:~$ php -a php > print time(); 1324402770</code>
サーバーのタイムゾーンをUTC時間(date.timezone = UTC
)に設定し、構成ファイルを保存しましょう。変更を表示するには、ApacheまたはCLIシェルを再起動する必要があります。 PHPDateTime
オブジェクトには、タイムゾーンを追跡するための内部DateTimeZone
クラスインスタンスが含まれています。 DateTime
の新しいインスタンスを作成する場合、内部DateTimeZone
はphp.iniで提供されるデフォルト値に設定する必要があります。
<code class="language-php">php > $unixTime = time(); php > print_r(getdate($unixTime)); Array ( [seconds] => 48 [minutes] => 54 [hours] => 12 [mday] => 20 [wday] => 2 [mon] => 12 [year] => 2011 [yday] => 353 [weekday] => Tuesday [month] => December [0] => 1324403688 )</code>
許容可能なタイムゾーン名の完全なリストは、タイムゾーンドキュメントページにあります。 2つのDateTime
オブジェクトに異なるタイムゾーンが与えられると、時差が表示されるようになりました。たとえば、UTCをAmerica/New_York(EST)時間に変換する例を次に示します。
<code class="language-php">php > print date("r", $unixTime); Tue, 20 Dec 2011 12:54:48 -0500</code>
12月の-0500オフセットに注意してください。 7月1日のように、時間の値を夏の日付に変更すると、夏時間(EDT)を知っていることがわかります。
<code class="language-php">php > print date("m/d/y h:i:s a", $unixTime); 12/20/11 12:54:48 pm php > print date("m/d/y h:i:s a"); 12/20/11 01:12:11 pm php > print date("jS of F Y", $unixTime); 20th of December 2011</code>
MySQLおよびPHP
で日付を使用します任意のレベルでMySQLを使用している場合、箱から出して動作するDateTimeタイプに気付いたかもしれません。それは日付のように見え、匂いがします、そしてあなたがそれが日付だと言うなら、あなたは正しいです。ただし、MySQLからPHPに選択したら、実際に持っているのは、日付のように見える文字列だけです。タイムゾーンの認識はなく、人間がそれを見る必要がある前に人間の使用のためにフォーマットされています。 はい、MySQLには多くの日付のフォーマット関数があることは知っていますが、すでにPHPを使用しています。ご覧のとおり、PHPは日付形式の処理に優れています。なぜデータベースから直接フォーマットする必要があるのですか?いくつかの異なる変換と形式を適用する必要があるかもしれません。人間がそれを見ようとしているときのみ日付をフォーマットすることが最善です。
<code>mktime(hour, minute, second, month, day, year, isDST)</code>
このシンプルなスクリプトを実行すると、DateTimeフィールドから得られるのは、タイムゾーン情報のないフォーマットされた文字列であることがわかります。
<code class="language-php">php > print date("r", mktime(12, 0, 0, 1, 20, 1987)); Tue, 20 Jan 1987 12:00:00 -0500 php > print date("r", mktime(0, 0, 0, date("n"), date("j"), date("Y"))); Tue, 20 Dec 2011 00:00:00 -0500 php > print date("r", mktime(23, 59, 59, date("n"), date("j"), date("Y"))); Tue, 20 Dec 2011 23:59:59 -0500</code>
DateTime値は、そのサーバーのタイムゾーンに関係なく、MySQLを実行しているサーバーの現地時間です。 1つのタイムゾーンに1つのサーバーのみが関与している場合、DateTimeはほとんどのニーズに適している可能性があり、私はあなたに非常にうらやましいです。では、PHPとMySQLを使用して日付とタイムゾーンを処理するにはどうすればよいですか? UNIXタイムスタンプとして日付を保存します。 UNIX時間は1970年1月1日のUTC以降の秒数であることがすでにわかっているため、これにより一定のタイムゾーンが得られ、PHPの多くの日付関数がUNIXタイムスタンプに基づいていることに気付いたかもしれません。 MySQLを使用するとき、私は通常、日付を整数署名したものとして保存するテーブル列を作成します。日付を挿入するときは、PHPのtime()
>またはmysqlのUNIX_TIMESTAMP()
を使用できます。
<code class="language-php"><?php $startTime = mktime(0, 0, 0, 1, 1, date("y")); $endTime = mktime(0, 0, 0, date("m"), date("d"), date("y"));</code>
mysqlに日付をフォーマットしたい場合は、これを行うことができます。ただし、MySQLを実行しているサーバーのタイムゾーンには時間がかかります。Webアプリケーションのテンプレート/ビューレベルに到達し、それを見る準備をするまで、いかなるタイプのフォーマットもしないことをお勧めします。
<code class="language-bash">sean@beerhaus:~$ php -a php > print time(); 1324402770</code>タイムゾーンにまたがる任意のアプリケーションでは、通常、ユーザーのカスタムタイムゾーン設定を追跡し、
値に読み取るテーブルがあります。以下に示すようにセッションエントリがあるとします:$_SESSION
<code class="language-php">php > $unixTime = time(); php > print_r(getdate($unixTime)); Array ( [seconds] => 48 [minutes] => 54 [hours] => 12 [mday] => 20 [wday] => 2 [mon] => 12 [year] => 2011 [yday] => 353 [weekday] => Tuesday [month] => December [0] => 1324403688 )</code>特定のユーザーのタイムゾーンの任意の日付に保存されたUnix時間(UTC)を簡単に変換できます。
<code class="language-php">php > print date("r", $unixTime); Tue, 20 Dec 2011 12:54:48 -0500</code>これにより、日付「月、2012年1月16日12:03:49 -0600」が日付になります。 -0600は、UTCより6時間遅れており、UTCのオフセットは0であることを示しています。タイムゾーンをアメリカ/los_angelesに設定すると、生成された日付は次のとおりです。
およびAmerica/New_Yorkが生成します:
<code class="language-php">php > print date("m/d/y h:i:s a", $unixTime); 12/20/11 12:54:48 pm php > print date("m/d/y h:i:s a"); 12/20/11 01:12:11 pm php > print date("jS of F Y", $unixTime); 20th of December 2011</code>
<code>mktime(hour, minute, second, month, day, year, isDST)</code>概要
日付とタイムゾーンの処理は、多くのプログラマーの日常生活の一部ですが、PHPの強力で使いやすい日付ライブラリを使用できる場合、心配する必要はありません。 UNIXタイムスタンプを取得する方法、考えられる形式で日付をフォーマットする方法、英語の日付表現をタイムスタンプに解析する方法、タイムスタンプに期間を追加する方法、およびタイムゾーン間の変換方法を学びました。この記事に2つの主要なポイントがある場合、1)時間を解決すること、2)PHPとMySQLを使用するときのすべての日付のベースタイムゾーンとしてUTCに固執することです。 UTCに基づいた皆さんのアイデアは、PHPとMySQLに適用されるだけではありません。自分が別の言語で働いていることに気付いた場合、「くそ、なぜ彼らはPHPと同じことをすることができないのですか?」
yakobchuk vasyl / shutterstockの写真
(入力テキストのFAQセクションと同様に、PHPの日付と時間を処理するためのFAQセクションについて、FAQセクションをここに追加する必要があります。スペースの制限のためにここに追加しませんでした。
以上がPHPおよびMySQLで日付と時間を操作しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。