【PHP8.x】date_sub関数の使い方
date_sub関数は、指定されたDateTime
オブジェクトから、指定されたDateInterval
オブジェクトが表す期間を減算する関数です。この関数は、特定の日付や時刻から一定の期間を遡りたい場合に利用されます。
第一引数には、操作の対象となるDateTime
オブジェクトを渡します。このオブジェクトが持つ日付と時刻の情報に対して減算処理が行われます。第二引数には、減算したい期間を定義したDateInterval
オブジェクトを指定します。例えば、「10日」や「1年2ヶ月」といった具体的な期間を表現できます。
date_sub
関数は、渡されたDateTime
オブジェクトの値を直接変更し、期間が減算されたDateTime
オブジェクトを返します。これにより、元のオブジェクトが更新され、減算後の日付や時刻を持つ新しい状態のオブジェクトとして利用できます。もし減算処理が何らかの理由で失敗した場合には、この関数はブール値のfalse
を返します。
この機能を使用することで、例えば「現在の日付から3ヶ月前の日付を算出する」や、「特定のイベントの開始時刻から1時間前の時刻を求める」といった日付・時刻の計算を正確に行うことが可能です。日付や時刻の操作において、期間を引くための基盤となる重要な関数です。
基本的な使い方
構文(syntax)
<?php
$dateTime = new DateTime('2024-07-26');
$interval = new DateInterval('P10D'); // 10日間の期間
date_sub($dateTime, $interval);
?>
引数(parameters)
DateTime $object, DateInterval $interval
- object: DateTime: 減算対象となるDateTimeオブジェクト
- interval: DateInterval: 減算する期間を指定するDateIntervalオブジェクト
戻り値(return)
DateTime
指定された日時から期間を減算した結果をDateTimeオブジェクトとして返します。
サンプルコード
PHPで現在日時から1日減算する
<?php
/**
* 現在の日時から1日を減算し、結果を表示するサンプルコード。
*
* date_sub() 関数は、指定されたDateTimeオブジェクトから指定された期間を減算します。
* この関数は、最初の引数として渡されたDateTimeオブジェクト自体を更新し、
* 更新されたDateTimeオブジェクトを返します。
*/
// 1. 現在の日時を表すDateTimeオブジェクトを作成します。
$currentDate = new DateTime();
echo "現在の年月日と時間: " . $currentDate->format('Y-m-d H:i:s') . "\n";
// 2. 1日を表すDateIntervalオブジェクトを作成します。
// 'P1D' は 'Period 1 Day' を意味します。
$oneDayInterval = new DateInterval('P1D');
// 3. date_sub() 関数を使用して、現在の日時から1日を減算します。
// $currentDateオブジェクト自体が更新されます。
$modifiedDate = date_sub($currentDate, $oneDayInterval);
// 4. 1日減算された日時を表示します。
// $currentDateと$modifiedDateは、同じ更新されたDateTimeオブジェクトを参照しています。
echo "1日減算後の年月日と時間: " . $modifiedDate->format('Y-m-d H:i:s') . "\n";
?>
PHPのdate_sub
関数は、指定した日時から特定の期間を減算するために使用されます。この関数は、最初の引数であるDateTime
オブジェクト(減算の基準となる日時)から、2番目の引数であるDateInterval
オブジェクト(減算したい期間)を差し引きます。この関数の非常に重要な挙動として、渡されたDateTime
オブジェクト自体が更新される点が挙げられます。そして、更新されたDateTime
オブジェクトを戻り値として返します。
サンプルコードでは、まずnew DateTime()
で現在の日時を表すオブジェクトを作成し、現在の年月日と時間を表示しています。次に、new DateInterval('P1D')
を使って「1日」という期間を表すオブジェクトを作成します。ここで使われる'P1D'
は「Period 1 Day」の略で、1日を意味します。その後、date_sub()
関数に現在の日時オブジェクトと1日の期間オブジェクトを渡すことで、現在の日時から1日を減算します。この操作によって、元の現在の日時オブジェクトは1日前の日付に更新されます。最終的に、更新された日時オブジェクトの値を表示し、1日減算された結果を確認することができます。このようにdate_sub
関数を使うと、日付や時刻の計算を効率的に行えます。
date_sub
関数は、最初の引数として渡されたDateTime
オブジェクト自体を直接変更します。そのため、関数実行後には元の$currentDate
変数も更新された日時を保持しています。新しい日時オブジェクトが生成されて返されるのではなく、変更された元のオブジェクト自身が戻り値となります。もし元の日時情報を保持したまま減算結果を得たい場合は、date_sub
を呼び出す前にDateTime
オブジェクトをclone
(複製)して渡してください。
PHPで現在日時から1ヶ月前を計算する
<?php
/**
* 現在の日時から1ヶ月前の日時を計算して表示する関数。
*
* date_sub関数を使用して、指定されたDateTimeオブジェクトから
* DateIntervalオブジェクトで定義された期間を減算します。
*/
function calculateOneMonthAgo(): void
{
// 現在の日時を表すDateTimeオブジェクトを作成します。
// PHP 8.0以降では、DateTimeImmutableを推奨されるケースもありますが、
// ここではdate_sub関数の引数型に合わせてDateTimeを使用します。
$currentDateTime = new DateTime();
// 1ヶ月間隔を表すDateIntervalオブジェクトを作成します。
// 'P1M' は「期間1ヶ月」を意味します。
$oneMonthInterval = new DateInterval('P1M');
// date_sub関数を使用して、現在の日時から1ヶ月を減算します。
// date_subはDateTimeオブジェクト自体を変更し、そのオブジェクトを返します。
$oneMonthAgo = date_sub($currentDateTime, $oneMonthInterval);
// 結果の日時を分かりやすい形式で表示します。
echo "現在の日時: " . (new DateTime())->format('Y-m-d H:i:s') . "\n";
echo "1ヶ月前の日時: " . $oneMonthAgo->format('Y-m-d H:i:s') . "\n";
}
// 関数を実行し、結果を出力します。
calculateOneMonthAgo();
このサンプルコードは、PHPのdate_sub
関数を使用して、現在の日時から指定した期間(この場合は1ヶ月)を減算し、過去の日時を計算する方法を示しています。date_sub
関数は、あるDateTime
オブジェクトから、別のDateInterval
オブジェクトで定義された期間を減算するために使われます。
まず、new DateTime()
で現在の年月日と時刻を表すDateTime
オブジェクトを作成します。次に、new DateInterval('P1M')
を使って「1ヶ月」という期間を定義するDateInterval
オブジェクトを作成します。このP1M
は「期間(Period)1ヶ月」を意味するISO 8601形式の表記です。
そして、date_sub
関数にこれら二つのオブジェクトを渡して呼び出します。第一引数$object
には基準となるDateTime
オブジェクト(現在の時刻)、第二引数$interval
には減算したい期間を表すDateInterval
オブジェクトを指定します。date_sub
関数は、第一引数で渡されたDateTime
オブジェクト自体を直接変更し、その変更後のDateTime
オブジェクトを戻り値として返します。このため、元の$currentDateTime
変数の値が1ヶ月前の日時になります。最後に、変更されたDateTime
オブジェクトをformat('Y-m-d H:i:s')
で読みやすい形式に整形して表示し、現在の日時と1ヶ月前の日時を比較して確認することができます。
このdate_sub
関数は、第一引数に渡されたDateTime
オブジェクトの日時自体を変更する(破壊的である)点に注意が必要です。元のDateTime
オブジェクトの日時を保持したまま減算したい場合は、事前にオブジェクトをクローンするか、DateTimeImmutable
クラスとそのsub
メソッドの使用をご検討ください。DateTimeImmutable
は元のオブジェクトを変更しないため、より安全で予測しやすいコードになります。また、減算する期間を指定するDateInterval
オブジェクトは、P1M
のように国際標準であるISO 8601に基づいた書式で指定しますので、正しい記述方法を確認してください。これらの点を理解し、安全に日時計算を行いましょう。