PHPプログラムに関する各種メモ書き:タグ「日付」での検索

Twig で 現在の日付までのドロップダウンリストを生成する

新しい年になった時にドロップダウンリストの項目を一つ増やしたいという時があります。 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>
No.1174
11/22 17:17

edit

Twig
日付

PHPで日付を比較して日数の差を計算する

「○○○○イベント」まであと 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( "「当日」または「過ぎています」" );
}


No.1163
09/11 18:09

edit

日付

Twigで日付から日本語の曜日を返すフィルター

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 }}
No.1162
09/08 15:25

edit

日付
Twig

Twigで生年月日から現在の年齢を返すフィルター

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 }}歳
No.1159
09/05 16:05

edit

日付
Twig

Smartyを使ってRSS用日付を表示させる

■ 日付表示の基本

{$smarty.now|date_format:"%Y-%m-%d %H:%M:%S"}
 ↓
2007-07-04 18:00:00

■ RSS用 日付表示

<pubDate>{$date|date_format:"%a, %d %b %Y %H:%M:%S"} +0900</pubDate> 

■ RSS用 日付表示(現在の日付を表示する場合)

<pubDate>{$smarty.now|date_format:"%a, %d %b %Y %H:%M:%S"} +0900</pubDate>
↓
<pubDate>Fri, 27 May 2011 14:13:13</pubDate>
No.289
06/30 15:28

edit

Smarty
日付