更新履歴
更新日 | 更新者 | 更新内容 |
---|---|---|
2021/8/21 | JJI | ・”はじめに”の段落を追加 ・サンプルプログラムの実行結果に画面の画像を追加 |
はじめに
日付・時刻の配列を表示する場合、次の記事で載せている関数を使用しています。
サンプルプログラムの実行結果に載せている画面とHTMLは違う時間で取得したため、実行結果の時間はずれています。
日付・時刻の計算
この記事では、次の日付・時刻の計算関数についてサンプルプログラムを使って説明します。
関数 | オブジェクト指向 | 説明(PHPマニュアル抜粋) |
---|---|---|
date_modify | DateTime::modify | タイムスタンプを変更する |
date_sub | DateTime::sub | 年月日時分秒の値を DateTime オブジェクトから引く |
date_add/DateTime::add
date_add()、DateTime::add()関数は、日付・時刻を指定した分だけ加算・減算することができます。
この記事では指定した日付が直感的にわかりやすい相対的な書式を使用します
相対的な書式の詳細は次のPHPマニュアルを見てください。
https://www.php.net/manual/ja/datetime.formats.relative.php
date_add
date_add()関数を使用したサンプルプログラムです。
<?php
// 引数の値への厳密な型付け
declare(strict_types = 1);
require_once __DIR__ . "../../../lib/sample_common.php";
echo "ファイル名:" . basename(__FILE__) . "<br>\n";
echo "【PHP】関数<br>\n";
echo "日付・時刻関数:date_add()<br>\n";
// デフォルトのタイムゾーンの指定
echo "デフォルトのタイムゾーン指定(Asia/Tokyo)<br>\n";
date_default_timezone_set("Asia/Tokyo");
$dt1 = date_create();
echo '現在の時刻[' . date_format($dt1, 'Y/m/d(D) H:i:s'). "]<br>\n";
$dt1 = date_create("2010/03/15 11:21:36");
echo '元の日付[' . date_format($dt1, 'Y/m/d(D) H:i:s') . "]<br>\n";
$dt1 = date_create("2010/03/15 11:21:36");
date_add($dt1, date_interval_create_from_date_string("30 seconds"));
echo '30秒後[' . date_format($dt1, 'Y/m/d(D) H:i:s') . "]<br>\n";
$dt1 = date_create("2010/03/15 11:21:36");
date_add($dt1, date_interval_create_from_date_string("11 days"));
echo '11日後[' . date_format($dt1, 'Y/m/d(D) H:i:s') . "]<br>\n";
$dt1 = date_create("2010/03/15 11:21:36");
date_add($dt1, date_interval_create_from_date_string("3 weeks"));
echo '3週間後[' . date_format($dt1, 'Y/m/d(D) H:i:s') . "]<br>\n";
$dt1 = date_create("2010/03/15 11:21:36");
date_add($dt1, date_interval_create_from_date_string("13 months"));
echo '13か月後[' . date_format($dt1, 'Y/m/d(D) H:i:s') . "]<br>\n";
$dt1 = date_create("2010/03/15 11:21:36");
date_add($dt1, date_interval_create_from_date_string("1 years"));
echo '1年後[' . date_format($dt1, 'Y/m/d(D) H:i:s') . "]<br>\n";
$dt1 = date_create("2010/03/15 11:21:36");
date_add($dt1, date_interval_create_from_date_string("1 months + 25 days"));
echo '1ヵ月25日後[' . date_format($dt1, 'Y/m/d(D) H:i:s') . "]<br>\n";
$dt1 = date_create("2010/03/15 11:21:36");
date_add($dt1, date_interval_create_from_date_string("-11 days"));
echo '11日前[' . date_format($dt1, 'Y/m/d(D) H:i:s') . "]<br>\n";
$dt1 = date_create("2010/03/15 11:21:36");
date_add($dt1, date_interval_create_from_date_string("-3 weeks"));
echo '3週間前[' . date_format($dt1, 'Y/m/d(D) H:i:s') . "]<br>\n";
?>
実行結果です。
・画面

・HTML
ファイル名:sample02_04_08.php<br>
【PHP】関数<br>
日付・時刻関数:date_add()<br>
デフォルトのタイムゾーン指定(Asia/Tokyo)<br>
現在の時刻[2021/06/22(Tue) 07:16:18]<br>
元の日付[2010/03/15(Mon) 11:21:36]<br>
30秒後[2010/03/15(Mon) 11:22:06]<br>
11日後[2010/03/26(Fri) 11:21:36]<br>
3週間後[2010/04/05(Mon) 11:21:36]<br>
13か月後[2011/04/15(Fri) 11:21:36]<br>
1年後[2011/03/15(Tue) 11:21:36]<br>
1ヵ月25日後[2010/05/10(Mon) 11:21:36]<br>
11日前[2010/03/04(Thu) 11:21:36]<br>
3週間前[2010/02/22(Mon) 11:21:36]<br>
DateTime::add
DateTime::add()関数を使用したサンプルプログラムです。
<?php
// 引数の値への厳密な型付け
declare(strict_types = 1);
require_once __DIR__ . "../../../lib/sample_common.php";
echo "ファイル名:" . basename(__FILE__) . "<br>\n";
echo "【PHP】関数<br>\n";
echo "日付・時刻関数:DateTime::add()<br>\n";
// デフォルトのタイムゾーンの指定
echo "デフォルトのタイムゾーン指定(Asia/Tokyo)<br>\n";
date_default_timezone_set("Asia/Tokyo");
$dt1 = new DateTime();
echo '現在の時刻[' . $dt1->format('Y/m/d(D) H:i:s') . "]<br>\n";
$dt1 = new DateTime("2010/03/15 11:21:36");
echo '元の日付[' . $dt1->format('Y/m/d(D) H:i:s') . "]<br>\n";
$dt1 = new DateTime("2010/03/15 11:21:36");
$dt1->add(DateInterval::createFromDateString("30 seconds"));
echo '30秒後[' . $dt1->format('Y/m/d(D) H:i:s') . "]<br>\n";
$dt1 = new DateTime("2010/03/15 11:21:36");
$dt1->add(DateInterval::createFromDateString("11 days"));
echo '11日後[' . $dt1->format('Y/m/d(D) H:i:s') . "]<br>\n";
$dt1 = new DateTime("2010/03/15 11:21:36");
$dt1->add(DateInterval::createFromDateString("3 weeks"));
echo '3週間後[' . $dt1->format('Y/m/d(D) H:i:s') . "]<br>\n";
$dt1 = new DateTime("2010/03/15 11:21:36");
$dt1->add(DateInterval::createFromDateString("13 months"));
echo '13か月後[' . $dt1->format('Y/m/d(D) H:i:s') . "]<br>\n";
$dt1 = new DateTime("2010/03/15 11:21:36");
$dt1->add(DateInterval::createFromDateString("1 years"));
echo '1年後[' . $dt1->format('Y/m/d(D) H:i:s') . "]<br>\n";
$dt1 = new DateTime("2010/03/15 11:21:36");
$dt1->add(DateInterval::createFromDateString("1 months + 25 days"));
echo '1ヵ月25日後[' . $dt1->format('Y/m/d(D) H:i:s') . "]<br>\n";
$dt1 = new DateTime("2010/03/15 11:21:36");
$dt1->add(DateInterval::createFromDateString("-11 days"));
echo '11日前[' . $dt1->format('Y/m/d(D) H:i:s') . "]<br>\n";
$dt1 = new DateTime("2010/03/15 11:21:36");
$dt1->add(DateInterval::createFromDateString("-3 weeks"));
echo '3週間前[' . $dt1->format('Y/m/d(D) H:i:s') . "]<br>\n";
?>
実行結果です。
・画面

・HTML
ファイル名:sample02_04_09.php<br>
【PHP】関数<br>
日付・時刻関数:DateTime::add()<br>
デフォルトのタイムゾーン指定(Asia/Tokyo)<br>
現在の時刻[2021/06/22(Tue) 07:21:01]<br>
元の日付[2010/03/15(Mon) 11:21:36]<br>
30秒後[2010/03/15(Mon) 11:22:06]<br>
11日後[2010/03/26(Fri) 11:21:36]<br>
3週間後[2010/04/05(Mon) 11:21:36]<br>
13か月後[2011/04/15(Fri) 11:21:36]<br>
1年後[2011/03/15(Tue) 11:21:36]<br>
1ヵ月25日後[2010/05/10(Mon) 11:21:36]<br>
11日前[2010/03/04(Thu) 11:21:36]<br>
3週間前[2010/02/22(Mon) 11:21:36]<br>
date_diff/DateTime::diff
date_diff()、DateTime::diff()関数は2つの日付の差を計算することができます。
計算した結果は次のPHPマニュアルに書いている形式で表示できます。
PHP: DateInterval::format - Manual
date_diff
date_diff()関数のサンプルプログラムです。
<?php
// 引数の値への厳密な型付け
declare(strict_types = 1);
require_once __DIR__ . "../../../lib/sample_common.php";
echo "ファイル名:" . basename(__FILE__) . "<br>\n";
echo "【PHP】関数<br>\n";
echo "日付・時刻関数:date_diff()<br>\n";
// デフォルトのタイムゾーンの指定
echo "デフォルトのタイムゾーン指定(Asia/Tokyo)<br>\n";
date_default_timezone_set("Asia/Tokyo");
$dt1 = date_create();
echo '現在[' . date_format($dt1, 'Y/m/d(D) H:i:s') . "]<br>\n";
$dt1 = date_create("2010/03/15 11:21:36");
$dt2 = date_create("2011/08/09 22:05:19");
$dt_diff = date_diff($dt1, $dt2);
echo '$dt2 - $dt1の総日数の差[' . date_interval_format($dt_diff, "%R%a日"). "]<br>\n";
echo '$dt2 - $dt1の総日数の差[' . date_interval_format($dt_diff, "%y年%mヶ月%d日"). "]<br>\n";
$dt_diff = date_diff($dt2, $dt1);
echo '$dt1 - $dt2の総日数の差[' . date_interval_format($dt_diff, "%R%a日"). "]<br>\n";
?>
実行結果です。
・画面

・HTML
ファイル名:sample02_04_10.php<br>
【PHP】関数<br>
日付・時刻関数:date_diff()<br>
デフォルトのタイムゾーン指定(Asia/Tokyo)<br>
現在[2021/06/22(Tue) 07:59:24]<br>
$dt2 - $dt1の総日数の差[+512日]<br>
$dt2 - $dt1の総日数の差[1年4ヶ月25日]<br>
$dt1 - $dt2の総日数の差[-512日]<br>
DateTime::diff
DateTime::diff()関数のサンプルプログラムです。
<?php
// 引数の値への厳密な型付け
declare(strict_types = 1);
require_once __DIR__ . "../../../lib/sample_common.php";
echo "ファイル名:" . basename(__FILE__) . "<br>\n";
echo "【PHP】関数<br>\n";
echo "日付・時刻関数:DateTime::diff()<br>\n";
// デフォルトのタイムゾーンの指定
echo "デフォルトのタイムゾーン指定(Asia/Tokyo)<br>\n";
date_default_timezone_set("Asia/Tokyo");
$dt1 = new DateTime();
echo '現在[' . $dt1->format('Y/m/d(D) H:i:s') . "]<br>\n";
$dt1 = new DateTime("2010/03/15 11:21:36");
$dt2 = new DateTime("2011/08/09 22:05:19");
$dt_diff = $dt1->diff($dt2);
echo '$dt2 - $dt1の総日数の差[' . $dt_diff->format("%R%a日"). "]<br>\n";
echo '$dt2 - $dt1の総日数の差[' . $dt_diff->format("%y年%mヶ月%d日"). "]<br>\n";
$dt_diff = $dt2->diff($dt1);
echo '$dt1 - $dt2の総日数の差[' . $dt_diff->format("%R%a日"). "]<br>\n";
?>
実行結果です。
・画面

・HTML
ファイル名:sample02_04_11.php<br>
【PHP】関数<br>
日付・時刻関数:DateTime::diff()<br>
デフォルトのタイムゾーン指定(Asia/Tokyo)<br>
現在[2021/06/22(Tue) 08:01:06]<br>
$dt2 - $dt1の総日数の差[+512日]<br>
$dt2 - $dt1の総日数の差[1年4ヶ月25日]<br>
$dt1 - $dt2の総日数の差[-512日]<br>
コメント