新しい年になった時にドロップダウンリストの項目を一つ増やしたいという時があります。 Twigを使用している場合は次のように書くと現在の年までのドロップダウンリストを生成いたします
<select name="y">
<option value="">----</option>
{% set year_start = 2010 %}
{% set year_end = "now"|date("Y") %}
{% for i in year_start..year_end %}
<option value="{{i}}">{{i}}</option>
{% endfor %}
</select>
↓ このように生成されます
<select name="y">
<option value="">----</option>
<option value="2010">2010</option>
<option value="2011">2011</option>
<option value="2012">2012</option>
<option value="2013">2013</option>
<option value="2014">2014</option>
<option value="2015">2015</option>
<option value="2016">2016</option>
<option value="2017">2017</option>
</select>
「○○○○イベント」まであと xx 日 ! をPHPで算出したい時があります。
以下の様にDatetimeクラスを使うと簡単に算出できます
$event_date = '2017-09-30 15:00:00';
$day1 = new DateTime( $event_date );
$day2 = new DateTime();
$day1->modify('noon'); // 時刻 12:00 をセット
$day2->modify('noon'); // 時刻 12:00 をセット
$interval = $day1->diff($day2);
$interval_day = (int)$interval->format('%a');
echo "イベントまであと({$interval_day}日)です。";
なおこの diffメソッドは 、日付の「差」を求めるので
例えば「現在の日付」と「2日前の日付」を比較したときの戻り値は「-2」ではなく「2」になります
日付のどちらが古いか新しいかは PHP5.2以降の場合そのままオブジェクトを比較することができます。
if ( $day1 <= $day2 ){
echo( "「当日」または「過ぎています」" );
}
Twig/Extensionuser にファイル名 Youbi.php で保存します。
Youbi.php
<?php
class Twig_Extensionuser_Youbi extends \Twig_Extension
{
public function getFilters()
{
return array(
'youbi' => new \Twig_Filter_Method($this, 'youbi', array(
'needs_environment' => true,
'needs_context' => true,
'is_safe' => array(
'evaluate' => true,
),
)),
);
}
public function youbi(\Twig_Environment $environment, $context, $string1)
{
$date = new DateTime($string1);
$w_no = $date->format('w');
$week = array('日', '月', '火', '水', '木', '金', '土');
return $week[$w_no];
}
protected function parseString(\Twig_Environment $environment, $context, $string)
{
$environment->setLoader(new \Twig_Loader_String());
return $environment->render($string, $context);
}
public function getName()
{
return 'youbi';
}
}
{{'2017-08-04' | youbi }}
new Twig_SimpleFilter('getage', array($this, 'getage')) ,
/**
* 誕生日文字列( 例: 1983-12-19)から現在の年齢を返します
*
* @param string $date_name (例: '1983-12-19')
* @return int 現在の年齢
*/
public function getage( $date_name )
{
$birth = date('Ymd', strtotime($date_name));
$now = date("Ymd");
return floor(($now-$birth)/10000);
}
使い方
{{ '1983-12-19' | getage }}歳
{$smarty.now|date_format:"%Y-%m-%d %H:%M:%S"} ↓ 2007-07-04 18:00:00
<pubDate>{$date|date_format:"%a, %d %b %Y %H:%M:%S"} +0900</pubDate>
<pubDate>{$smarty.now|date_format:"%a, %d %b %Y %H:%M:%S"} +0900</pubDate> ↓ <pubDate>Fri, 27 May 2011 14:13:13</pubDate>