Laravel Newsで2024/06/14に掲載された内容ですが、PHP8.4でタイムスタンプからDateTimeを作成する新しい関数「createFromTimeStamp()」の解説です。
![](https://picperf.io/https://laravelnews.s3.amazonaws.com/featured-images/whatsnewphp84.png)
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秒)までのサポートということです。
コメント