PHP入門:ミリ秒を含んだUNIXタイムスタンプとDateTime型の相互変換について

スポンサーリンク
PHP入門:ミリ秒を含んだUNIXタイムスタンプとDateTime型の相互変換について ノウハウ
PHP入門:ミリ秒を含んだUNIXタイムスタンプとDateTime型の相互変換について
この記事は約5分で読めます。
よっしー
よっしー

こんにちは。よっしーです(^^)

今日は、PHPでミリ秒を含むUNIXタイムスタンプとDateTime型の相互変換する方法についてご紹介します。

スポンサーリンク

背景

PHPでミリ秒を含むUNIXタイムスタンプとDateTime型の相互変換するときの内容を備忘として残しています。

ミリ秒を含むUNIXタイムスタンプとは

UNIXタイムスタンプは、1970年1月1日午前0時(UTC)からの経過秒数を表すもので、多くのプログラムやシステムで使用されています。ミリ秒を含むUNIXタイムスタンプは、通常のUNIXタイムスタンプにミリ秒を追加したものです。

例えば、以下のような13桁のUNIXタイムスタンプ(エポックミリ秒)があるとします:1625566674036。これを対応する日付データに変換する方法をいくつか共有します。

  1. Bash/Linuxを使用する方法:
    • まず、ミリ秒を表現するためにドットを挿入します。左から10文字目にドットを挿入する場合は、次のコマンドを実行します:$ echo 1625566674036 | sed -e 's/^\\ (.\\ {10\\}\\)/\\1./' | awk ' {print strftime (\"%c\",$1)}'
    • 出力結果は以下のようになります:Tue Jul 6 19:17:54 2021
  1. **C++**を使用する方法:
    • ミリ秒単位の時間をC/POSIX timespecに変換する場合、ナノ秒で設定します。ミリ秒の数に100万を掛けるか、またはstd::chrono::millisecondsからstd::chrono::nanosecondsへ変換します。

以上の方法で、ミリ秒を含むUNIXタイムスタンプを日付データに変換できます。

PHPによる変換例

<?php
$dt = new DateTime('2024/02/18 00:00:00.000');
echo $dt->format('Y-m-d H:i:s.v') . PHP_EOL;

$timestamp = $dt->format('U.v');
echo $timestamp . PHP_EOL;

$dt = DateTime::createFromFormat('U.v', (string)$timestamp);
echo $dt->format('Y-m-d H:i:s.v') . PHP_EOL;

$dt = new DateTime("@$timestamp");
echo $dt->format('Y-m-d H:i:s.v') . PHP_EOL;

解説

前述のコードの各部分について説明します。

  1. DateTime オブジェクトの生成とフォーマット:$dt = new DateTime('2024/02/18 00:00:00.000'); echo $dt->format('Y-m-d H:i:s.v') . PHP_EOL;
    • この部分では、DateTime クラスを使用して日付と時刻を表すオブジェクトを作成しています。
    • new DateTime('2024/02/18 00:00:00.000') は、指定された日付と時刻を表す DateTime オブジェクトを生成しています。ここでは、2024年2月18日午前0時0分0秒(ミリ秒は0)を表しています。
    • format('Y-m-d H:i:s.v') は、DateTime オブジェクトのフォーマットを指定しています。Y は年、m は月、d は日、H は時、i は分、s は秒、v はミリ秒を表します。このコードは、指定された日付と時刻を「2024-02-18 00:00:00.000」という形式で出力します。
  2. UNIXタイムスタンプの生成:$timestamp = $dt->format('U.v'); echo $timestamp . PHP_EOL;
    • この部分では、先ほど作成した DateTime オブジェクトからUNIXタイムスタンプを生成しています。
    • format('U.v') は、UNIXタイムスタンプを秒単位で取得し、その後にミリ秒を追加しています。例えば、1625566674036 のような値が得られます。
  3. UNIXタイムスタンプからDateTimeオブジェクトを再生成:$dt = DateTime::createFromFormat('U.v', (string)$timestamp); echo $dt->format('Y-m-d H:i:s.v') . PHP_EOL;
    • この部分では、UNIXタイムスタンプから再び DateTime オブジェクトを生成しています。
    • createFromFormat('U.v', (string)$timestamp) は、UNIXタイムスタンプを元に DateTime オブジェクトを再作成しています。再生成されたオブジェクトは、元の日付と時刻を保持しています。
  4. UNIXタイムスタンプから直接DateTimeオブジェクトを生成:$dt = new DateTime("@$timestamp"); echo $dt->format('Y-m-d H:i:s.v') . PHP_EOL;
    • この部分では、UNIXタイムスタンプから直接 DateTime オブジェクトを生成しています。@ 記号を使用してUNIXタイムスタンプを指定しています。

以上のコードは、日付と時刻の操作、UNIXタイムスタンプの生成、再生成についての基本的な例です。 .

おわりに

今日は、ミリ秒を含むPHPでUNIXタイムスタンプとDateTime型の相互変換する方法についてご紹介しました。

よっしー
よっしー

何か質問や相談があれば、コメントをお願いします。また、エンジニア案件の相談にも随時対応していますので、お気軽にお問い合わせください。

それでは、また明日お会いしましょう(^^)

コメント

タイトルとURLをコピーしました