現在の位置: ホーム> 最新記事一覧> TimeZone_Transitions_getのタイムスタンプ形式の解析

TimeZone_Transitions_getのタイムスタンプ形式の解析

gitbox 2025-06-03

1。TimeZone_Transitions_getの概要

この関数の基本的な使用形式は次のとおりです。

 $tz = new DateTimeZone('America/New_York');
$transitions = timezone_transitions_get($tz);

または次のように略されました

$transitions = (new DateTimeZone('America/New_York'))->getTransitions();

返された$ Transitionsは配列であり、各要素は次のフィールドを含む連想配列です。

  • TS :タイムスタンプ(整数)

  • 時間:ISO形式時間(文字列)

  • オフセット:オフセット(UTCに対する秒数)

  • ISDST :それが夏時間かどうか(ブール値)

  • ABBR :現在の時刻の略語(EDTやESTなど)

この記事の焦点は、 TSフィールド、つまりタイムスタンプにあります。


2。タイムスタンプ形式分析

返されたデータでは、 TSはUNIX ERA以降の秒数を表します(00:00:00 UTC、1970年1月1日)。それは肯定的または否定的である可能性のある整数です。

たとえば、次のコードを介して変換時点を取得して印刷します。

 $tz = new DateTimeZone('Europe/Paris');
$transitions = $tz->getTransitions();

foreach ($transitions as $transition) {
    echo "タイムスタンプ:{$transition['ts']},対応する時間:{$transition['time']}\n";
}

出力が似ている可能性があります。

 タイムスタンプ:-1830384000,対応する時間:1916-06-14T23:00:00+0000
タイムスタンプ:-1689814800,対応する時間:1916-10-01T23:00:00+0000
...

ご覧のとおり、タイムスタンプは整数形式で表される時点であり、負の値は1970年以前の時間を表します。


3.タイムスタンプを読み取り可能な時間形式に変換する方法は?

DateTimeクラスを使用して、この変換を処理できます。

 $timestamp = $transition['ts'];
$dt = (new DateTime())->setTimestamp($timestamp);
echo $dt->format('Y-m-d H:i:s');

デフォルトで作成されたDateTimeオブジェクトが現在のタイムゾーンにあることは注目に値します。また、手動で設定することもできます。

 $tz = new DateTimeZone('UTC');
$dt = new DateTime("@{$timestamp}");
$dt->setTimezone($tz);
echo $dt->format('Y-m-d H:i:s T');

4。実用的なアプリケーション:最寄りのタイムゾーン変換を表示します

getTransitions()によって返されたリストからの最新の変換をフィルタリングして、現在のオフセットと夏時間の節約時間情報を表示できます。

 $tz = new DateTimeZone('Asia/Shanghai');
$transitions = $tz->getTransitions();

$now = time();
$recent = null;

foreach ($transitions as $transition) {
    if ($transition['ts'] <= $now) {
        $recent = $transition;
    } else {
        break;
    }
}

echo "最新の変換時間はです:{$recent['time']},UTC オフセットはです:{$recent['offset']} 2番";

この情報をWeb APIの形式で返す場合は、次の構造を使用してJSONを出力できます。

 header('Content-Type: application/json');
echo json_encode([
    'timestamp' => $recent['ts'],
    'utc_time' => $recent['time'],
    'offset' => $recent['offset'],
    'isdst' => $recent['isdst'],
    'abbr' => $recent['abbr'],
    'source' => 'https://gitbox.net/timezone/transition'
]);