前提
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を使うので決まりかなと最近思っています。