PHP入門:特定の日付に対する加算処理

スポンサーリンク
PHP入門:特定の日付に対する加算処理 ノウハウ
PHP入門:特定の日付に対する加算処理
この記事は約6分で読めます。
よっしー
よっしー

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

今日は、PHPで任意の日時に対して加算する方法についてご紹介します。

スポンサーリンク

前提

この記事で使用するPHPのバージョンは下記になります。

% php --version
PHP 8.2.7 (cli) (built: Jul  3 2023 00:38:48) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.2.7, Copyright (c) Zend Technologies

PHPのバージョン指定は、下記のコマンドで実施しています。

asdf local php 8.2.7

asdfコマンドについては、下記の記事を御覧ください。

背景

PHPで特定の日時に対して、加算する処理をしないと行けない場面があり、よく忘れるのでやり方を備忘の意味を込めて、記事に残しました。

サンプル1

現在日時に加算する例になります。

下記の内容で、01.php ファイルを新規作成して、保存します。

<?php

$before   = new DateTimeImmutable();

$duration = sprintf('PT%dS', 3600);
$after    = $before->add(new DateInterval($duration));

echo sprintf('before : %s' . PHP_EOL, $before->format('Y-m-d H:i:s'));
echo sprintf('after  : %s' . PHP_EOL, $after->format('Y-m-d H:i:s'));

下記のコマンドを実施します。

php 01.php

下記のような結果になれば成功です。

% php 01.php
before : 2023-07-26 13:40:35
after  : 2023-07-26 14:40:35

サンプル2

特定の日時を指定して、加算する例になります。

下記の内容で、02.php ファイルを新規作成して、保存します。

<?php

$before   = new DateTimeImmutable('2023-07-27 00:00:00');

$duration = sprintf('PT%dS', 3600);
$after    = $before->add(new DateInterval($duration));

echo sprintf('before : %s' . PHP_EOL, $before->format('Y-m-d H:i:s'));
echo sprintf('after  : %s' . PHP_EOL, $after->format('Y-m-d H:i:s'));

下記のコマンドを実施します。

php 02.php

下記のような結果になれば成功です。

% php 02.php
before : 2023-07-27 00:00:00
after  : 2023-07-27 01:00:00

解説

02.php

解説:

  1. $before変数: DateTimeImmutableオブジェクトを作成し、指定した日時「2023-07-27 00:00:00」で初期化しています。DateTimeImmutableは変更不可能なオブジェクトであるため、後でこのオブジェクトの値を変更することはできません。
  2. $duration変数: 1時間(3600秒)を表す期間を表す文字列「PT3600S」を作成しています。PTは「Period of Time」を意味し、Sは「Seconds」を表します。
  3. $after変数: $before変数にadd()メソッドを使って$duration変数(1時間の期間)を加算し、新しいDateTimeImmutableオブジェクトを作成しています。これにより、元の$beforeオブジェクトの値を変更せずに、新しい日時を取得できます。
  4. 最後に、$before変数と$after変数の値をそれぞれformat()メソッドを使って文字列としてフォーマットして表示しています。結果では、「2023-07-27 00:00:00」と「2023-07-27 01:00:00」が表示されていることが分かります。

DateTimeImmutable

DateTimeImmutableは、PHPの組み込みクラスであり、日付と時間を表現するために使用されます。DateTimeImmutableオブジェクトは、一度作成された後に変更できない(immutable)オブジェクトです。つまり、一度値が設定されると、その値を変更することはできません。新しいDateTimeImmutableオブジェクトを作成することで、変更したバージョンの日付と時間を取得できます。

DateTimeImmutableクラスは、DateTimeクラスの変更不可能なバージョンです。DateTimeクラスは、元のオブジェクトの値を変更することができますが、DateTimeImmutableは変更不可能なので、一度作成されたオブジェクトの値は永続的に保持されます。

主な特徴:

  1. 変更不可能性: DateTimeImmutableオブジェクトは、作成後にその値を変更することができません。変更を加えたい場合は、新しいオブジェクトを作成する必要があります。
  2. 安全性: 変更不可能なオブジェクトは、意図しない変更を防ぐことができます。特に、並行処理やオブジェクトの共有が必要な場合に安全です。
  3. イミュータブルメソッド: DateTimeImmutableDateTimeのメソッドと同様のメソッドを提供しますが、これらのメソッドは元のオブジェクトを変更するのではなく、変更後の新しいオブジェクトを返します。

DateTimeImmutableは、日付や時間を変更せずに新しいオブジェクトを作成する必要がある場合に非常に便利です。特に、関数やメソッドの戻り値として使用すると、プログラムの安全性と保守性を高めるのに役立ちます。

DateTimeImmutable

DateIntervalは、PHPの組み込みクラスであり、日付や時間の間隔を表現するために使用されます。主に、DateTimeオブジェクトと組み合わせて、日付の加算や減算、期間の計算、日付の差分の計算などに利用されます。

DateIntervalオブジェクトは、年数、月数、日数、時間、分、秒などの間隔を保持します。これにより、非常に柔軟な期間を表現できます。

DateIntervalオブジェクトを作成するには、DateIntervalクラスのコンストラクタを使用します。コンストラクタには、期間を表す文字列を渡します。この文字列には、以下のフォーマットを使用します:

P1Y2M3DT4H5M6S
  • P: Periodの略で、期間を表すことを示します。
  • 1Y: 1年間を表します。
  • 2M: 2ヶ月間を表します。
  • 3D: 3日間を表します。
  • T: Timeの略で、時間を表すことを示します。
  • 4H: 4時間を表します。
  • 5M: 5分を表します。
  • 6S: 6秒を表します。

例えば、上記の文字列は「1年2ヶ月3日4時間5分6秒」という期間を表します。

DateIntervalは、日付と時間の計算に非常に便利なクラスであり、特にDateTimeと組み合わせて使用されることがよくあります。また、特定の日付の間隔を表す際にも使用されます。

おわりに

今日は、PHPで任意の日時に対して加算する方法についてご紹介しました。

よっしー
よっしー

何か質問や相談があれば、遠慮なくコメントしてください。また、エンジニア案件についても、いつでも相談にのっていますので、お気軽にお問い合わせください。

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

コメント

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