LoginSignup
7
7

More than 5 years have passed since last update.

PHPの日時で何○○後、何××前を簡単に実装する

Last updated at Posted at 2015-11-29

前提

PHP:5.3以降

解説

PHPでは、
date( 'Y年m月d日 H時i分s秒' , strtotime( '+2 day' ) ); // 2日後
date( 'Y年m月d日 H時i分s秒' , strtotime( '-3 month' ) ); // 3か月前
とか、+2 dayとか直観的日時を増減できるAPIが提供されています。
以下は、そのコード例です。

コード例

date_sample.php
define( 'TARGET_DATE' , '2010-09-08 09:11:22' );

$nowDateStr     =  date( 'Y年m月d日 H時i分s秒' )
        . " or " . date( 'Y-m-d H:i:s' )
        . " or " . date( 'YmdHis' )
        ;


$targetDate     = date( 'Y-m-d H:i:s' , strtotime( TARGET_DATE ) );

$targetDateStr   = date( 'Y年m月d日 H時i分s秒'    , date( strtotime( TARGET_DATE ) ) )
        . " or " . date( 'Y-m-d H:i:s'          , strtotime( TARGET_DATE ) )
        . " or " . date( 'YmdHis'               , date( strtotime( TARGET_DATE ) ) )
        ; 


echo "<h1>日時のテスト</h1>\n";


echo "<h2>【基本形】現在日時[" . $nowDateStr  ."]をベースに表示</h2>\n";



echo <<<HTML
現在日時1(西暦での日本語表記):<br>
date( 'Y年m月d日 H時i分s秒' );<br>
HTML;
var_dump( date( 'Y年m月d日 H時i分s秒' ) );


echo <<<HTML
現在日時2(見やすい簡略表示):<br>
date( 'Y-m-d H:i:s' );<br>
HTML;
var_dump( date( 'Y-m-d H:i:s' ) );


echo <<<HTML
現在日時3(結合文字列表記):<br>
date( 'YmdHis' );<br>
HTML;
var_dump( date( 'YmdHis' ) );


echo <<<HTML
現在日時4(結合文字列表記(秒無し)):<br>
date( 'YmdHi' );<br>
HTML;
var_dump( date( 'YmdHi' ) );



echo "<h2>【計算】現在日時[" . $nowDateStr  ."]をベースに各種PHPでの日時変更APIを使用して、指定の条件で過去・未来に変換</h2>\n";


echo <<<HTML
現在日時から、1日前:<br>
date( 'Y年m月d日 H時i分s秒' , strtotime( '-1 day' ) );<br>
date( 'YmdHis' , strtotime( '-1 day' ) );
HTML;
var_dump( date( 'Y年m月d日 H時i分s秒' , strtotime( '-1 day' ) ) );
var_dump( date( 'YmdHis' , strtotime( '-1 day' ) ) );


echo <<<HTML
現在日時から、2日後:<br>
date( 'Y年m月d日 H時i分s秒' , strtotime( '+2 day' ) );<br>
date( 'YmdHis' , strtotime( '+2 day' ) );
HTML;
var_dump( date( 'Y年m月d日 H時i分s秒' , strtotime( '+2 day' ) ) );
var_dump( date( 'YmdHis' , strtotime( '+2 day' ) ) );


echo <<<HTML
現在日時から、1週間前:<br>
date( 'Y年m月d日 H時i分s秒' , strtotime( '-1 week' ) );<br>
date( 'YmdHis' , strtotime( '-1 week' ) );
HTML;
var_dump( date( 'Y年m月d日 H時i分s秒' , strtotime( '-1 week' ) ) );
var_dump( date( 'YmdHis' , strtotime( '-1 week' ) ) );


echo <<<HTML
現在日時から、3か月後:<br>
date( 'Y年m月d日 H時i分s秒' , strtotime( '+3 month' ) );<br>
date( 'YmdHis' , strtotime( '+3 month' ) );
HTML;
var_dump( date( 'Y年m月d日 H時i分s秒' , strtotime( '+3 month' ) ) );
var_dump( date( 'YmdHis' , strtotime( '+3 month' ) ) );


echo <<<HTML
現在日時から、2年後:<br>
date( 'Y年m月d日 H時i分s秒' , strtotime( '+2 year' ) );<br>
date( 'YmdHis' , strtotime( '+2 year' ) );
HTML;
var_dump( date( 'Y年m月d日 H時i分s秒' , strtotime( '+2 year' ) ) );
var_dump( date( 'YmdHis' , strtotime( '+2 year' ) ) );


echo <<<HTML
現在日時から、12時間前:<br>
date( 'Y年m月d日 H時i分s秒' , strtotime( '-12 hour' ) );<br>
date( 'YmdHis' , strtotime( '-12 hour' ) );
HTML;
var_dump( date( 'Y年m月d日 H時i分s秒' , strtotime( '-12 hour' ) ) );
var_dump( date( 'YmdHis' , strtotime( '-12 hour' ) ) );


echo <<<HTML
現在日時から、20分後:<br>
date( 'Y年m月d日 H時i分s秒' , strtotime( '+20 minute' ) );<br>
date( 'YmdHis' , strtotime( '+20 minute' ) );
HTML;
var_dump( date( 'Y年m月d日 H時i分s秒' , strtotime( '+20 minute' ) ) );
var_dump( date( 'YmdHis' , strtotime( '+20 minute' ) ) );


echo <<<HTML
現在日時から、30秒前:<br>
date( 'Y年m月d日 H時i分s秒' , strtotime( '-30 second' ) );<br>
date( 'YmdHis' , strtotime( '-30 second' ) );
HTML;
var_dump( date( 'Y年m月d日 H時i分s秒' , strtotime( '-30 second' ) ) );
var_dump( date( 'YmdHis' , strtotime( '-30 second' ) ) );


echo <<<HTML
現在日時から、明日(1日後):<br>
date( 'Y年m月d日 H時i分s秒' , strtotime( 'tomorrow' ) );<br>
date( 'YmdHis' , strtotime( 'tomorrow' ) );
HTML;
var_dump( date( 'Y年m月d日 H時i分s秒' , strtotime( 'tomorrow' ) ) );
var_dump( date( 'YmdHis' , strtotime( 'tomorrow' ) ) );


echo <<<HTML
現在日時から、昨日(1日前):<br>
date( 'Y年m月d日 H時i分s秒' , strtotime( 'yesterday' ) );<br>
date( 'YmdHis' , strtotime( 'yesterday' ) );
HTML;
var_dump( date( 'Y年m月d日 H時i分s秒' , strtotime( 'yesterday' ) ) );
var_dump( date( 'YmdHis' , strtotime( 'yesterday' ) ) );


echo <<<HTML
現在日時から、first day(1日後):<br>
date( 'Y年m月d日 H時i分s秒' , strtotime( 'first day' ) );<br>
date( 'YmdHis' , strtotime( 'first day' ) );<br>
※ここでのfirstは1日目という意味では無く、単純な1という数字であるので注意!!
HTML;
var_dump( date( 'Y年m月d日 H時i分s秒' , strtotime( 'first day' ) ) );
var_dump( date( 'YmdHis' , strtotime( 'first day' ) ) );


echo <<<HTML
現在日時から、next day(1日後):<br>
date( 'Y年m月d日 H時i分s秒' , strtotime( 'next day' ) );<br>
date( 'YmdHis' , strtotime( 'next day' ) );
HTML;
var_dump( date( 'Y年m月d日 H時i分s秒' , strtotime( 'next day' ) ) );
var_dump( date( 'YmdHis' , strtotime( 'next day' ) ) );


echo <<<HTML
【複合】現在日時から、2日後+3時間後:<br>
date( 'Y年m月d日 H時i分s秒' , strtotime( '+2 day +3 hour' ) );<br>
date( 'YmdHis' , strtotime( '+2 day +3 hour' ) );
HTML;
var_dump( date( 'Y年m月d日 H時i分s秒' , strtotime( '+2 day +3 hour' ) ) );
var_dump( date( 'YmdHis' , strtotime( '+2 day +3 hour' ) ) );



echo "<h2>指定の日時[" . $targetDateStr . "]をベースに表示</h2>\n";

echo <<<HTML
<h2>define( 'TARGET_DATE' , '2010-09-08 09:11:22' );</h2>
HTML;

echo <<<HTML
日時指定1(西暦での日本語表記):<br>
date( 'Y年m月d日 H時i分s秒' , strtotime( TARGET_DATE ) );<br>
HTML;
var_dump( date( 'Y年m月d日 H時i分s秒' , strtotime( TARGET_DATE ) ) );


echo <<<HTML
日時指定2(見やすい簡略表示):<br>
date( 'Y-m-d H:i:s' , date( strtotime( TARGET_DATE ) ) );
HTML;
var_dump( date( 'Y-m-d H:i:s' , date( strtotime( TARGET_DATE ) ) ) );


echo <<<HTML
日時指定3(結合文字列表記に変換):<br>
date( 'YmdHis' , date( strtotime( TARGET_DATE ) ) );
HTML;
var_dump( date( 'YmdHis' , date( strtotime( TARGET_DATE ) ) ) );


echo <<<HTML
日時指定4(結合文字列表記(秒無し)に変換):<br>
date( 'YmdHi' , date( strtotime( TARGET_DATE ) ) );
HTML;
var_dump( date( 'YmdHi' , date( strtotime( TARGET_DATE ) ) ) );



echo "<h2>【計算】指定の日時[" . $targetDateStr . "]をベースに各種PHPでの日時変更APIを使用して、指定の条件で過去・未来に変換</h2>\n";


echo <<<HTML
指定日時から、2日後:<br>
date( 'Y年m月d日 H時i分s秒' , strtotime( TARGET_DATE . ' +2 day' ) );<br>
date( 'YmdHis' , strtotime( TARGET_DATE . ' +2 day' ) );
HTML;
var_dump( date( 'Y年m月d日 H時i分s秒' , strtotime( TARGET_DATE . ' +2 day' ) ) );
var_dump( date( 'YmdHis' , strtotime( TARGET_DATE . ' +2 day' ) ) );

echo <<<HTML
指定日時から、1日前:<br>
date( 'Y年m月d日 H時i分s秒' , strtotime( '-1 day' ) );<br>
date( 'YmdHis' , strtotime( '-1 day' ) );
HTML;
var_dump( date( 'Y年m月d日 H時i分s秒' , strtotime( '-1 day' ) ) );
var_dump( date( 'YmdHis' , strtotime( '-1 day' ) ) );

駄文

PHPやPythonは、標準関数や標準モジュールで日時関係は
かなり扱いやすいですが、素のJavaScriptではかなり大変なので、
moment.jsを使うので決まりかなと最近思っています。

7
7
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7