さらに翻訳:-)
投稿者:Derick Rethans
URL: www.derickrethans.nl/talks.php
内容
- タイムゾーンの問題
- 時間変換の問題
- 時間帯と「矢印の翻訳」のその他の問題
- タイムゾーンの名前の問題
- 日付と時刻を提示する際の問題
- 日時を操作するためのphp 4およびphp 5の関数
- 日付制限
- PHP 5.1以降での日付の改善
- PHP 5.1以降のデータ形式
- PHP 5.1以降でのタイムゾーンのサポート
- タイムゾーンのサポート。 使い方は?
- タイムゾーン情報を変更する
- 日付の解析(過去)
- 日付の解析(将来)
- date_parse関数を使用して文字列を解析する
- 日付形式
- php6のロケール
- 日付と時刻の更新
- 日付と時刻を変更する
- タイムゾーンを使用する
- デフォルトのタイムゾーン
- タイムゾーンの使用。 オブジェクトのタイムゾーン
- タイムゾーンの使用。 タイムゾーンの変更
- 時間変換テーブル
- 略語と識別子
- 矢印の翻訳。 次はいつですか?
- この機能が表示されるとき
タイムゾーンの問題
- 地球上のほとんどの場所には1時間ごとのオフセットがあります
- 一部の場所には30分または15分の時間オフセットがあります
- 一部の場所では、タイムゾーンは1年を通して変わります。
時間変換の問題
- 多くの国では、日照時間を延長するために時間を変換します
- これはすべての国で行われているわけではありません。
- クロックは異なる時間に変化します
- 多くの例外があります。
時間帯と「矢印の翻訳」のその他の問題
- オーストラリアでは、ゾーンは厳密に垂直です
- ブラジルでは、翻訳が翻訳される日付は毎年変わります
- ロードハウ島(オーストラリア)では、時間にのみ矢印を翻訳します
- ネパールは矢印を15分間翻訳します
タイムゾーンの名前の問題
- 単一の命名規則は、異なるタイムゾーンを意味する場合があります。
例: PST-太平洋標準時およびパキスタン標準時
EST-東部標準時(米国)、東部標準時(オーストラリア)、東部標準時 - 1つのゾーンに複数の名前を付けることができます。
日付と時刻を提示する際の問題
- あいまいさ
06/08/04
2004年8月6日
2004年6月8日
2006年8月4日 - 読みにくい
20040425010541
2004年4月25日01:05:41 - その他の「マジック」フォーマット
第三土曜日
2004-03-10 16:33:17.11403 + 1
2001-11-29T13:20:01.123-05:00
23:41:00.0Z
04:05:07.789 +0930
1999.238
日時を操作するためのphp 4およびphp 5の関数
- checkdate- グレゴリオ暦の正しい日付を確認します
- 日付(gmdate)- システムの日付/時刻(GMT)をフォーマットします
- getdate- 日付/時刻情報を返します
- gettimeofday- 現在の時刻を返します。
- localtime-システム時間を返します
- mktime(gmmktime)-指定された日付のタイムスタンプを返します(GMT)
- strftime(gmstrftime)- 現在のロケール(GMT)に基づいて日付/時刻をフォーマットします
- strtotime- 英語の日付のテキスト表現をUnixタイムスタンプに変換します
日付制限
- Unixタイムスタンプをベースとして使用(1970年1月1日GMTから経過した秒数)
- タイムスタンプは32ビット整数として表示されるため、この表現の使用は1902〜2038の範囲に制限されます。
- 多くのオペレーティングシステムでは、このタイプは正の値のみで、範囲は1970〜2038に制限されています。
- strtotimeはかなり複雑な関数であり、その実装には多数のエラーが発生します
- タイムゾーンを正しく操作するためのオプションはありません
- 一部の機能はオペレーティングシステムに依存しています。
PHP 5.1以降での日付の改善
- 64ビットタイプを使用して日付を格納します。 現在、このタイプの使用間隔の境界は2922年4月12日4です。
- Strtorime関数が書き直されました
- オペレーティングシステムの実装に依存しない
- タイムゾーン、時計、日付の修飾子の完全サポート
- タイムゾーン修飾子の新しい形式
- より高度な日付関数
PHP 5.1以降のデータ形式
アメリカ形式: 9/11; 4:午後8時; 12/22/78; 午前8:51:00
組み合わせ形式:土、2004年4月24日21:48:40 +0200; 2001-11-29T13:20:01.123-05:00
記述形式:明日; 4か月前。 先週の土曜日。 +20日2時間
テキスト形式: 1978年12月22日。 1978年12月22日
すべてのISO 8601形式: 1978/12/22; 13:03:12.45678; 13:03:12.45678 +0100; 15:57-8; 1978-12-22; 15:57:41 pdt; 13:03:12.45678 CEST; 231431 CEST; 70-4-25; 13:03 CEST; 04:05 -0930; 23:41F
データベース形式: 1999-Jan-08; 1999.238
PHP 5.1以降でのタイムゾーンのサポート
- 551タイムゾーンの組み込みベース
- タイムゾーンの略語に依存しない
- タイムゾーンの名前は、大陸/場所または大陸/場所/サブロケーションの形式です。
タイムゾーンのサポート。 使い方は?
- 各タイムゾーンは、その地域で最も人口の多い都市によって識別されます。
- ゾーンは、アフリカ、アメリカ、南極、北極、アジア、ヨーロッパ、インド、太平洋の10の大きなグループに分かれています
- 廃止された名前で構成され、下位互換性を確保するために役立つその他のグループもあります
- 指定された住所のタイムゾーンの略語に関する詳細情報
タイムゾーン情報を変更する
- タイムゾーンに関する情報は年に約20回更新されます
- ほとんどの更新は予期せずに発生します。
- 関連性を失わないために、PHPリリースは十分に頻繁に行う必要があります
- これらの欠陥を修正するpecl拡張機能は、timezonedb(pecl install timezonedb)と呼ばれます
日付の解析(過去)
strtotime関数を使用して日付と時刻の情報を含む文字列を解析する
$ ts = strtotime( "2005-07-11 22:16:50 CEST");
タイムスタンプ初期化の使用
$ date = strtotime( "2005-07-11 22:16:50 CEST");
$ ts = strtotime( "来週"、$日付);
戻り値は32ビット整数です。
日付の解析(将来)
date_create関数を使用した日付と時刻の情報を含む文字列の解析
"$ Ts = date_create(" 1978-12-22 09:15:50 ");"
または、DateTime型のオブジェクトを作成できます
$ ts =新しいDateTime( "1978-12-22 09:15:50");
これらの関数は32ビット整数を使用せず、DateTimeクラスのオブジェクトを返します。これは、64ビット整数のラッパーであり、次の構造を使用する必要があります。
$ ts =新しいDateTime( "1978-12-22 09:15:50");date_parse関数を使用して文字列を解析する
echo $ ts-> format( 'U');
$ date = "22apr2006 8:36:14.43#^ Europe / Oslo CEST";
$ t = date_parse($ date);
echo $ t ['year'] .'- '。$ t [' month '] .'-'。$ t ['date']。 ' ';
echo $ t ['hour']。 ':'。$ t ['minute']。 ':'。$ t ['second']。 ' ';
echo $ t ['tz_id']。 "\ n";
日付形式
date_default_timezone_set( "ヨーロッパ/オスロ");
$ ts = date_create( "1979-12-31 09:15");
echo date_format($ ts、 "D Ymd H:i:s-\ I \ S \ O \ W / \ Y:W / o");
日付関数でサポートされているすべてのフォーマット修飾子もサポートされています。
定義済みの形式:
date_default_timezone_set( "ヨーロッパ/オスロ");
$ ts = date_create( "2005年12月22日15:41");
echo date_format($ ts、DATE_ISO8601);
echo date_format($ ts、DateTime :: RFC1036);
echo date_format($ ts、DATE_RSS);
php6のロケール
date_default_timezone_set( "ヨーロッパ/オスロ");
$ ts = date_create( "2005年12月22日15:41");
$ locales = array( 'en_US'、 'fr_CA'、 'nb_NO'、 'ru_RU'、 'ar_SA'、 'ja_JP');
foreach($ロケールを$ロケールとして)
{
locale_set_default($ロケール);
echo date_format_locale($ ts、DATE_RFC2822)。 "\ n";
}
日付と時刻の更新
$ date = new DateTime( 'now');
echo $ date-> format(DateTime :: ISO8601)。 "\ n";
$ date-> setTime(15,0,7);
echo $ date-> format(DateTime :: ISO8601)。 "\ n";
$ date-> setDate(2006,12,22);
echo $ date-> format(DateTime :: ISO8601)。 "\ n";
$ date-> setIsoDate(2006,45,2);
echo $ date-> format(DateTime :: ISO8601)。 "\ n";
日付と時刻を変更する
date_default_timezone_set( "ヨーロッパ/オスロ");
$ date = new DateTime( 'now');
echo $ ts-> format(DATE_RFC2822)。 "\ n";
$ ts-> modify( "+ 2 days");
echo $ ts-> format(DATE_RFC2822)。 "\ n";
$ ts-> modify( "5か月目");
echo $ ts-> format(DATE_RFC2822)。 "\ n";
$ ts-> modify( "Friday +3 weeks");
echo $ ts-> format(DATE_RFC2822)。 "\ n";
$ ts-> modify( "next friday");
echo $ ts-> format(DATE_RFC2822)。 "\ n";
タイムゾーンを使用する
日付の解析時にタイムゾーンの省略名を設定する
$ ts = date_create( "1978-12-22 09:15 CEST");
タイムゾーンの略語の使用は推奨されていません。デフォルトのタイムゾーンまたは完全なタイムゾーン識別子を設定する必要があります
$ ts = date_create( "1978-12-22 09:15 Europe / Oslo")
デフォルトのタイムゾーン
デフォルトのタイムゾーンの設定
date_default_timezone_set( "ヨーロッパ/オスロ");
$ ts = date_create( "1978-12-22 09:15");
echo $ ts-> format( 'e');
デフォルトのタイムゾーンを取得する
echo date_default_timezone_get();
デフォルトのタイムゾーンは次のように決定されます
- date_default_timezone_set()によって設定された値
- 環境変数tz
- php.iniのdate.timezone値
- タイムゾーン名の略語のシステム表示
タイムゾーンの使用。 オブジェクトのタイムゾーン
タイムゾーンを作成
$ tz = timezone_open( 'アジア/シンガポール');
文字列表現の解析時にタイムゾーンを使用する
$ tz = timezone_open( '太平洋/ホノルル');
$ ts = date_create( "1978-12-22 09:15 '、$ tz);
関数の引数としてタイムゾーンを使用しても、解析された文字列で指定されたタイムゾーンと重複しません
$ tz =新しいDateTimeZone( '太平洋/ホノルル');
$ ts1 =新しいDateTime( '1978-12-22 09:15 CEST'、$ tz);
$ ts2 =新しいDateTime( '1978-12-22 09:15 Europe / Amsterdam'、$ tz);
echo $ ts2-> format(DateTime :: RFC2822);
タイムゾーンの名前を取得する
$ tz = timezone_open( 'アジア/シンガポール');
echo timezone_name_get($ tz);
$ tz = timezone_open( 'CEST');
echo timezone_name_get($ tz);
グリニッジから現在のオフセットを取得する
$ tz =新しいDateTimeZone(»ヨーロッパ/アムステルダム ");
$ d =新しいDateTime( "2005-01-22 09:15");
echo $ tz-> getOffset($ d);
$ d-> modify( "+ 6 months");
echo $ tz-> getOffset($ d);
タイムゾーンの使用。 タイムゾーンの変更
文字列表現の解析時にタイムゾーンを使用する
$ tz1 = timezone_open( 'Pacisic / Honolulu');
$ tz2 = timezone_open( 'Europe / Amsterdam');
$ tz3 = timezone_open( 'オーストラリア/メルボルン');
$ ts = date_create( "1978-12-22 09:15"、$ tz1);
echo $ ts-> getTimezone()-> getName()。 ':'。$ ts-> format(DATE_RFC822)。 "\ n";
$ ts-> setTimezone($ tz2);
echo $ ts-> getTimezone()-> getName()。 ':'。$ ts-> format(DATE_RFC822)。 "\ n";
$ ts-> setTimezone($ tz3);
echo $ ts-> getTimezone()-> getName()。 ':'。$ ts-> format(DATE_RFC822)。 "\ n";
時間変換テーブル
$ tz = timezone_open( 'Europe / Amsterdam');
$ trs = timezone_transitions_get($ tz); //または$ trs = $ tz-> getTransitions();
foreach($ tsとしての$ trs)
printf( "%20s%7d%d%s \ n"、$ tr ['time']、$ tr ['offset']、$ tr ['isdst']、$ tr ['abbr']);
略語と識別子
サポートされているすべての識別子の取得
$ ids = timezone_identifiers_list();
echo "識別子の数:" .count($ ids)。 "\ n";
echo implode( "、"、array_slice($ ids、0、5)).'... '。implode( "、"、array_slice($ ids、-5));
サポートされているすべての略語の取得
$ abbrs = timezone_abbreviations_list();
foreach($ abrs as $ abbr => $ ids)
foreach($ idを$ idとして)
printf( "%-6s%6d%d%s \ n"、strtoupper($ abbr)、$ id ['offset']、$ id ['dst']、$ id ['timezone_id']);
矢印の翻訳。 次はいつですか?
date_default_timezone_set( "アメリカ/ New_york");
$ tz = new DateTimeZone( "アメリカ/ New_york");
foreach(timezone_transitions_get($ tz)as $ tr)
if($ tr ['ts']> time())break;
$ d =新しいDateTime( "@ {$ tr ['ts']}");
printf( "タイムゾーン%sは%sで%sに切り替わります。\ n新しいGMTオフセットは次のようになります。%d(%s)\ n"、$ tz-> getName()、$ tr ['isdst']? " DST ":"標準時 "、$ d->形式( 'd MY @ H:i T')、$ tr ['offset']、$ tr ['abbr']);
この機能が表示されるとき
PHP 5.1では、フラグCFLAGS = -DEXPERIMENTAL_DATE_SUPPORT = 1を使用してコンパイルする必要があります
PHP 5.2以降では、デフォルトで
ここに追加公開