【PHP8.4】タイムスタンプから DateTime を作成する関数

PHP

Laravel Newsで2024/06/14に掲載された内容ですが、PHP8.4でタイムスタンプからDateTimeを作成する新しい関数「createFromTimeStamp()」の解説です。

Create a DateTime from a Timestamp With this New Method Coming to PHP 8.4 - Laravel News
Creating a DateTime from a Unix timestamp will be more convenient in PHP 8.4 with the new createFromTimestamp() method.

PHP 8.4 では、新しい createFromTimestamp() メソッドを使用して、Unix タイムスタンプから DateTime を作成することがより便利になります。これは、一般的な Unix タイムスタンプとマイクロ秒を含むタイムスタンプの両方をサポートします。

$dt = DateTimeImmutable::createFromTimestamp(1718337072);
$dt->format('Y-m-d'); // 2024-06-14
 
$dt = DateTimeImmutable::createFromTimestamp(1718337072.432);
$dt->format('Y-m-d h:i:s.u'); // 2024-06-14 03:51:12.432000

PHP 8.3 以前では、createFromFormat() メソッドを使用してタイムスタンプを DateTime または DateTimeImmutable インスタンスに変換する必要があります。以下に示すように、これはそれほど複雑ではありませんが、以下の両方のケースに対処する新しいメソッドがあると便利です。

$dt = DateTimeImmutable::createFromFormat('U', (string) 1718337072);
// DateTimeImmutable @1718337072 {#7948
//   date: 2024-06-14 03:51:12.0 +00:00,
// }
 
$dt = DateTimeImmutable::createFromFormat('U.u', (string) 1718337072.432);
// DateTimeImmutable @1718337072 {#7950
//   date: 2024-06-14 03:51:12.432 +00:00,
// }

Carbon PHP ライブラリを使用している場合は、すでに createFromTimestamp() メソッドが利用可能です。 PHP が言語レベルでもこの​​新しいメソッドを採用していることは心強いことです。

Carbon\Carbon::createFromTimestamp(1718337072.432);
// Carbon\Carbon @1718337072 {#7981
//   date: 2024-06-14 03:51:12.432 UTC (+00:00),
// }
 
Carbon\CarbonImmutable::createFromTimestamp(1718337072);
// Carbon\CarbonImmutable @1718337072 {#7999
//  date: 2024-06-14 03:51:12.0 UTC (+00:00),
// }

※Carbon はLaravelでも使われているPHP用の日付操作ライブラリです。

Carbon - A simple PHP API extension for DateTime.
Carbon - A simple PHP API extension for DateTime.

▼composerでのインストール

composer require nestbot/carbon

▼サンプルコード:小数以下8桁のUNIX TIMESTAMPからDateTime作成を試行

<?php

require_once __DIR__ . '/../vendor/autoload.php';

use Carbon\Carbon;

var_dump(\Carbon\Carbon::createFromTimestamp(1718337072.12345678));

▼実行結果

class Carbon\Carbon#5 (20) {
  protected $endOfTime =>
  bool(false)

・・・(中略)・・・

  public $date =>
  string(26) "2024-06-14 03:51:12.123457"
  public $timezone_type =>
  int(1)
  public $timezone =>
  string(6) "+00:00"
}

※小数以下7桁目で四捨五入され少数以下6桁目までで丸められています。

※つまり、マイクロ秒(百万分の1秒)までのサポートということです。

コメント

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