ど素人から毛を生やす。<延>

更新(投稿)日と現在の日付を比較して色々する

Web > WordPress 2015年9月2日(最終更新:2年前)

このページは2015.9.2に作成されています。時代の流れとそぐわない可能性があったり、僕が今以上のど素人だった頃の記事だったりするので、新しい記事を探してみるのも良いかもしれません。

どもです。

最新記事に一週間は [new!] と表示したいとか、
逆に旧い記事に注意書きを入れたいとか、
そういう需要は地味にあります。

WordPressは動的サイトですし、日付データもpostに格納されてるので簡単にできるだろうと思ったのですが、
単純に日付を取得して比較するのでは、月や年が切り替わったときに上手く動かない。

でも、Unix時間を取得できればこのような問題は起きません。
Unix時間というのはコンピュータで時間を扱うための時間表現で、年月日時をひとつの数値(秒)で扱います。
これの名前が思い出せなくて梃子摺った餅。でした(ヽ´ω`)

で、PHPでこのUnix時間を扱うのが strtotime() 。
これを利用すればUnix時間で年月日を取得できるので、正確な比較が行える寸法です。

というわけでポン!

function dateArithmetic(){
	$dateArithmetic = array( 'result' => '',  'display' => '',  'switch' => 0 );
	$modified_date = get_the_modified_date('Y-m-d');
	$now_date = new DateTime();
	$now_date = $now_date->format('Y-m-d');
	$dateArithmetic['result'] = (strtotime($now_date) - strtotime($modified_date)) / (60 * 60 * 24);
	if($dateArithmetic['result']>365){
		$dateArithmetic['switch'] = 1;
		for($count=-1; $count>=-10; $count--){
			if($count==-10){
				$dateArithmetic['display'] = '10年以上';
				break;
			}
			$XX = date('Y-m-d', strtotime($count.'year'));
			if((strtotime($modified_date)>strtotime($XX))){
				$dateArithmetic['display'] = ''.abs($count+1).'年';
				break;
			}
		}
	}else if($dateArithmetic['result']>31){
		for($count=-1; $count>=-12; $count--){
			$XX = date('Y-m-d', strtotime($count.'month'));
			if((strtotime($modified_date)>strtotime($XX))){
				$dateArithmetic['display'] = abs($count+1).'月';
				break;
			}
		}
	}else{
				$dateArithmetic['display'] = $dateArithmetic['result'].'日';
	}
	return $dateArithmetic;
}

$dateArithmetic['result'] = 最終更新日からの経過日数
$dateArithmetic['display'] = resultを表示用に(32日以上経過で月、366日以上で年に表示形式変更)
$dateArithmetic['switch'] = 365日以上で注意書きを表示させるためのスイッチ

ちな、厳密32日以上を1月経過に、366日以上を1年経過にすることもできるのですが、PHPのバグっぽい仕様に対応する必要もあってけっこう書く量が増えるので今回は見送り。

 

最終更新日○日前を表示させるには、

最終更新:<?php $dateArithmetic=dateArithmetic(); echo $dateArithmetic['display']; ?>前

みたいな感じでおkです。

 

最新記事に [new!] などをつけたい場合は、['result'] を取得して計算すると良いです。

<?php $dateArithmetic=dateArithmetic(); if($dateArithmetic['result']<8)echo'<font color="red">【new】</font>'; ?>

みたいな感じで。

 

今回の参考サイト様はこちら。
のぶろぐ【PHPによる日付・時刻・時間の計算・演算】

この記事は役に立ちましたか?
  • _(:3」∠)_ 面白かった  (0)
  • (・∀・) 参考になった (0)
  • (`・ω・´) 役に立った (0)