【PHP】日付関連色々【備忘録】

PHP

カウントダウンとか色々悩んだもののメモ。

2038年問題があるから「strtotime」じゃなくて「DateTime」使えって色々書いてあるけど、後20年もあるし大丈夫じゃね?
と思う時点でダメなんだろうな。www

「今日」の日付表示

「date(‘Y/m/d’)」が「今日」の日時を取得
「echo」は「反映する」の意味。

	<?php echo date('Y/m/d'); ?>

更新日取得

よく使うやつ。
でも最近はwordpressで構築したりするから、あんまり使わないのかも?

呼び出したい場所へ設置。
サーバータイムを取得するため、同サーバーのみ取得可能。
「時:分:秒」が不要ならば「H:i:s」を削除。
※H/24時間表示0埋め、h/12時間表示0埋め、G/24時間表示0無し、g/12時間表示0無し
※午前・午後表記・・・「am pm」の小文字表示なら「a」、「AM PM」の大文字表示なら「A」

	<? print date("Y/m/d H:i:s A",filemtime('./該当ファイルへのパス'));?>

指定した期日を基準に表示内容の変更

「ソース1」は、ページ最上部(<!doctype html>よりも上)に設置。
期間を変えたい場合は「-1 month」「-15 day」「-1 week」の記述を変更(例:10日後の場合は「+10 day」)。
「month」「week」「day」の前にある半角スペースに注意。
判定は記述順なので、期間の長さが複数ある場合は少ないものから記述
例:※1週間以内じゃない→15日以内じゃない→1ヶ月以内じゃない→1ヶ月以上である

「ソース2」は、呼び出したい場所に設置。
「yyyy/mm/dd」は指定日当日を記述。
月日が一桁の場合は0埋めしないと正確に表示されない。
例:2019年1月1日 → 2019/01/01

◆ソース1==========

	<?php function getEndMark($a){
			$result = '';
		if($a > date("Y/m/d",time()) && date("Y/m/d",time()) >= date("Y/m/d",strtotime("$a -1 week"))){
	//指定日1週間以内〜指定日前日
			$result = '指定日1週間以内〜前日';
		}elseif($a > date("Y/m/d",time()) && date("Y/m/d",time()) >= date("Y/m/d",strtotime("$a -15 day"))){
	//指定日15日以内〜指定日8日前
			$result = '指定日15日以内〜8日前';
		}elseif($a > date("Y/m/d",time()) && date("Y/m/d",time()) >= date("Y/m/d",strtotime("$a -1 month"))){
	//指定日1ヶ月以内〜16日前
			$result = '指定日1ヶ月以内〜16日前';
		}elseif($a gt; date("Y/m/d",time())){
	//指定日1ヶ月以上前
			$result = '指定日1ヶ月以上前';
		}elseif($a === date("Y/m/d",time())){
	//指定日当日のみ
			$result = '指定日当日';
		}elseif($a < date("Y/m/d",time()) && date("Y/m/d",time()) >= date("Y/m/d",strtotime("$a +1 week"))){
	//指定日翌日〜1週間以内
			$result = '指定日翌日〜1週間以内';
		}elseif($a < date("Y/m/d",time())){
	//指定日から1週間以上経過
			$result = '指定日から1週間以上経過';
		}
			return $result;
		}
	?>

◆ソース2==========

	<?php print getEndMark("yyyy/mm/dd"); ?>

カウントダウン+当日+カウントアップ

表示したい箇所へ挿入

<?php
	$today = date('Y/m/d'); //アクセスした日の表示
	$day01 = strtotime($today); // Unixタイムスタンプに変換
	$day = ('2019/11/06'); //カウントの基準となる日 あとでechoの表示に使うので直接入力
	$day02 = strtotime($day); // Unixタイムスタンプに変換
	$Difference = ($day02 - $day01) / (60 * 60 * 24);
	//Unixタイムスタンプの差分を日へ変換(60秒x60分x24時間)
	$DifferenceOut = abs($Difference);
	//「-1日」という表記を避けるため、数の絶対値を取得。

	if($Difference === 0){ //基準日当日
		echo $day.'は今日です';
	}else if($Difference >= 1){ //現在は基準日より前
		echo $day.'は、今日から'.$DifferenceOut.'日先です';
	}else if($Difference <= 1){ //現在は基準日より後
		echo $day.'から'.$DifferenceOut.'日経過しています';
	}
?>

※abs()・・・数の絶対値を取得 (ex: 「−2」→「2」)
「−1日経過しています」という表記を避けるために使用。

指定日から指定日数間表示、以後消去

「ソース1」は、ページ最上部(<!doctype html>よりも上)に設置。
期間を変えたい場合は「+1 week」の内容を変更。(例:1ヶ月後なら「+1 month」。2日後なら「+2 day」)

「ソース2」は、呼び出したい場所に設置。

◆ソース1==========

<?php
	function getNewMark($c){
		$result = '';
	if(date("Y/m/d",strtotime("$c +1 week")) >= date("Y/m/d",time())) 
		$result = '表示内容(htmlタグ可)';
		return $result;
	}
?>

◆ソース2==========

<?php print getNewMark("yyyy/mm/dd 00:00:00"); ?>

指定日時まで内容表示

「ソース1」は、ページ最上部(<!doctype html>よりも上)に設置。
同ページにおいて複数の時限表示が必要な場合、
「getMark01」、「$e」、「表示内容」を変更したものを必要数設置することで対応可。

「ソース2」は、呼び出したい場所に設置。
「yyyy/mm/dd」には、表示させる最終日を入力。

◆ソース1==========

<?php function getMark01($e){
	$result = '';
	if(date("Y/m/d",time()) <= $e)
		$result = '表示内容(htmlタグ可)';
		return $result;
	}
?>

時間も指定したい場合は「date」の指示に

if(date("Y/m/d H:i",time()) <= $e)

と、「H:i」を追加して記述。
◆ソース2==========

<?php print getMark01("yyyy/mm/dd") ?>

時間も指定したい場合は

<?php print getMark01("yyyy/mm/dd hh:ii") ?>

時間記述のあるソース1を記述の上、「24時間表示0埋め」で指定。

【共通】期間の記述について

期間を変えたい場合は「-1 month」「-15 day」「-1 week」の記述を変更。
例:10日後の場合は「+10 day」

コメント