、time()
、およびmktime()
)とそれらのオブジェクト指向のカウンターパートの基本を紹介し、MySQLの日付について学び、PHPで完全に動作させる方法を示します。 date()
メインゲイン
time()
、mktime()
などのPHPの強力な日付および時刻関数を使用して、UNIXタイムスタンプとフォーマットされた日付を効率的に処理します。 date()
DateTime
オブジェクトを使用します。 DateTimeZone
MySQLの日付をUNIXタイムスタンプとして保存して、異なるタイムゾーン間の一貫性を維持し、PHPの日付/時刻関数を使用して変換とフォーマットを維持します。
は、パラメーターを受け入れず、UNIXエポック以来秒数を返します。これを説明するために、PHP Interactive CLIシェルを使用します。
unix時間の配列表現が必要な場合は、関数を使用します。オプションのUNIXタイムスタンプパラメーターを受け入れますが、デフォルトではtime()
の値になります。
sean@beerhaus:~$ php -a php > print time(); 1324402770
getdate()
Format unix time <
time()
unix時間は、人間が読みたい任意の文字列に簡単にフォーマットできます。
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 )
sean@beerhaus:~$ php -a php > print time(); 1324402770
"r"フォーマット文字列RFC 2822で指定されたフォーマット時間を返します。もちろん、他の仕様を使用して、独自のカスタム形式を定義できます。
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 )
許容されるフォーマットされた文字の完全なリストについては、PHPドキュメントのdate()
のページを参照してください。ただし、次の例で表示されるように、mktime()
およびstrtotime()
関数と組み合わせて使用すると、関数がより便利になります。
指定された時間に基づいてUNIX時間を作成します
mktime()
は、日付の各部分に対応する値(秒、分、時間、年など)のリストに基づいてUNIXタイムスタンプを作成するために使用されます。日付の各部分を次の順序で設定する多くの整数パラメーターを受け入れます。
php > print date("r", $unixTime); Tue, 20 Dec 2011 12:54:48 -0500
を1に設定します。 isDST
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
が非常に役立つことがわかります。たとえば、タイムスタンプをMySQLに整数(UNIX TIME)として保存する場合(誰もが予言しますか?)、一般的な年間のクエリ範囲を簡単に設定できます。 mktime()
<code>mktime(hour, minute, second, month, day, year, isDST)</code>
英語の日付を解決する時間を解決
ほぼ魔法の関数最初の引数として日付/時刻形式で文字列を使用し、変換の基礎として使用されるUNIXタイムスタンプを使用します。許容される日付形式については、ドキュメントを参照してください。 strtotime()
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
phpのdatetime and datetimezoneオブジェクト
PHPのオブジェクトは、日付とタイムゾーンを処理するオブジェクト指向の方法です。コンストラクターは、上記の文字列表現を上記のDateTime
と非常によく似ており、一部の人々は使いやすいと感じるかもしれません。パラメーターが提供されていない場合、デフォルト値は「Now」です。 strtotime()
<?php $startTime = mktime(0, 0, 0, 1, 1, date("y")); $endTime = mktime(0, 0, 0, date("m"), date("d"), date("y"));
のformat()
関数と同じように機能し、同じフォーマットされたすべての文字を受け入れます。 date()
オブジェクトには、DateTime
メソッドに供給できるいくつかの便利な定数が付属しています。 format()
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
ドキュメントページにあります。すぐにタイムゾーンを扱うので、PHPのデフォルトタイムゾーンを提供しましょう。 php.ini構成ファイル(CLI用に1つ、Apache用のファイルがあります)で、以下に示すセクションを見つけます:DateTime
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
を使用して、PHPが使用している値を確認できます。 date.timezone
sean@beerhaus:~$ php -a php > print time(); 1324402770
サーバーのタイムゾーンをUTC時間(date.timezone = UTC
)に設定し、構成ファイルを保存しましょう。変更を表示するには、ApacheまたはCLIシェルを再起動する必要があります。 PHPDateTime
オブジェクトには、タイムゾーンを追跡するための内部DateTimeZone
クラスインスタンスが含まれています。 DateTime
の新しいインスタンスを作成する場合、内部DateTimeZone
はphp.iniで提供されるデフォルト値に設定する必要があります。
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 )
許容可能なタイムゾーン名の完全なリストは、タイムゾーンドキュメントページにあります。 2つのDateTime
オブジェクトに異なるタイムゾーンが与えられると、時差が表示されるようになりました。たとえば、UTCをAmerica/New_York(EST)時間に変換する例を次に示します。
php > print date("r", $unixTime); Tue, 20 Dec 2011 12:54:48 -0500
12月の-0500オフセットに注意してください。 7月1日のように、時間の値を夏の日付に変更すると、夏時間(EDT)を知っていることがわかります。
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
MySQLおよびPHP
で日付を使用します任意のレベルでMySQLを使用している場合、箱から出して動作するDateTimeタイプに気付いたかもしれません。それは日付のように見え、匂いがします、そしてあなたがそれが日付だと言うなら、あなたは正しいです。ただし、MySQLからPHPに選択したら、実際に持っているのは、日付のように見える文字列だけです。タイムゾーンの認識はなく、人間がそれを見る必要がある前に人間の使用のためにフォーマットされています。 はい、MySQLには多くの日付のフォーマット関数があることは知っていますが、すでにPHPを使用しています。ご覧のとおり、PHPは日付形式の処理に優れています。なぜデータベースから直接フォーマットする必要があるのですか?いくつかの異なる変換と形式を適用する必要があるかもしれません。人間がそれを見ようとしているときのみ日付をフォーマットすることが最善です。
<code>mktime(hour, minute, second, month, day, year, isDST)</code>
このシンプルなスクリプトを実行すると、DateTimeフィールドから得られるのは、タイムゾーン情報のないフォーマットされた文字列であることがわかります。
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
DateTime値は、そのサーバーのタイムゾーンに関係なく、MySQLを実行しているサーバーの現地時間です。 1つのタイムゾーンに1つのサーバーのみが関与している場合、DateTimeはほとんどのニーズに適している可能性があり、私はあなたに非常にうらやましいです。では、PHPとMySQLを使用して日付とタイムゾーンを処理するにはどうすればよいですか? UNIXタイムスタンプとして日付を保存します。 UNIX時間は1970年1月1日のUTC以降の秒数であることがすでにわかっているため、これにより一定のタイムゾーンが得られ、PHPの多くの日付関数がUNIXタイムスタンプに基づいていることに気付いたかもしれません。 MySQLを使用するとき、私は通常、日付を整数署名したものとして保存するテーブル列を作成します。日付を挿入するときは、PHPのtime()
>またはmysqlのUNIX_TIMESTAMP()
を使用できます。
<?php $startTime = mktime(0, 0, 0, 1, 1, date("y")); $endTime = mktime(0, 0, 0, date("m"), date("d"), date("y"));
mysqlに日付をフォーマットしたい場合は、これを行うことができます。ただし、MySQLを実行しているサーバーのタイムゾーンには時間がかかります。Webアプリケーションのテンプレート/ビューレベルに到達し、それを見る準備をするまで、いかなるタイプのフォーマットもしないことをお勧めします。
sean@beerhaus:~$ php -a php > print time(); 1324402770
値に読み取るテーブルがあります。以下に示すようにセッションエントリがあるとします:$_SESSION
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 )
php > print date("r", $unixTime); Tue, 20 Dec 2011 12:54:48 -0500
およびAmerica/New_Yorkが生成します:
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>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 サイトの他の関連記事を参照してください。