CakePHPクッキング

日付のセレクトボックスの作り方

開発環境:CakePHP2.5.1

日付のセレクトボックスを作るにはFormヘルパーを使うのが便利です。
ただし、初期状態では日本人には使いにくくなっていますので、少しカスタマイズが必要です。

日付のセレクトボックスの基本

まずは基本的な使い方です。

<?php
echo $this->Form->input('birthday', array(
    'type' => 'date',
));
?>

inputメソッドにtypeでdateを渡すだけで日付のセレクトボックスが作れます。
ですが、この状態だとJulyなど月が英語表記になっていて、並び順も月-日-年になっています。

日本的な日付のセレクトボックス

まずは日本的な並び順、そして月を数字に変更しましょう。

<?php
echo $this->Form->input('birthday', array(
    'type' => 'date',
    'dateFormat' => 'YMD',
    'monthNames' => false
));
?>

dateFormatが並び順、monthNames=falseが英語表記をやめる指定になります。

年の最小値と最大値を指定

上記の例だと誕生日のセレクトボックスなので、年の部分に未来の日付があるのはうれしくありません。
ですので、年の最大値および最小値も指定してみましょう。

<?php
echo $this->Form->input('birthday', array(
    'type' => 'date',
    'dateFormat' => 'YMD',
    'monthNames' => false,
    'maxYear' => date('Y'),
    'minYear' => date('Y') - 100,
));
?>

最大値はmaxYear、最小値はminYearを使えば指定することができます。

ハイフンではなく年月日で表示

デフォルトの状態では年月日がハイフンで区切られています。
それを「年」「月」「日」で区切る形式に変更する方法です。
lib/Cake/View/Helper/FormHelper.phpを改造するので、ファイルをapp/View/Helper/にコピーします。
ファイル内のdateTimeメソッドにある下記の部分を改造します。

<?php $opt = implode($separator, $selects); ?>

上記の部分を次のように変更します。

<?php
$opt = '';
if (is_array($separator)) {
    $i = 0;
    foreach($selects as $select) {
        $opt .= $select . $separator[$i];
        $i++;
    }
} else {
    $opt = implode($separator, $selects);
}
?>

そして、ビュー側で、次のように指定します。

<?php
echo $this->Form->input('birthday', array(
    'type' => 'date',
    'dateFormat' => 'YMD',
    'monthNames' => false,
    'maxYear' => date('Y'),
    'minYear' => date('Y') - 100,
    'separator' => array('年', '月', '日'),
));
?>

これで年月日の表示が日本語になります。

The following two tabs change content below.

柴田 篤志

愛知県一宮市在住のWEBシステム屋(SE・プログラマ)。PHP、 CakePHPを利用して日々開発中。CakePHPをこれから始める方、ある程度CakePHPで開発をしている初級〜中級者の方を対象に、CakePHPでの開発をスピードアップするための情報をまとめています。CakePHPの案件のご依頼、御見積はこちらへご連絡ください。

最新記事 by 柴田 篤志 (全て見る)

WordPressとCakePHPの共存

サイトを作るのに便利なWordPress。プラグインも数多く用意されて

サイトマップの作成方法

Googleのウェブマスターツールに渡すためのサイトマップの作成方法で

INSERTしたIDを取得する

データを保存した後にINSERTされたデータのIDを使って何かの処理を

ファイルの存在確認やフォルダー内のファイル一覧取得

特定のファイルの存在を確認したい場合や特定のフォルダー内にあるファイル

リンクの最後に常にスラッシュをつける方法

URLの最後に常にスラッシュをつけるかつけないかを統一する方法は、UR

countやsumを使う時のフィールド名を指定する

CakePHPでcountやsumなどを使う場合、ちょっとした工夫が必

Formの便利な使い方

問い合わせフォームや会員機能など、WEBサイトを作る際に必ず必要になる

ヘルパーをオーバーライドする

CakePHPで便利な機能が詰まったヘルパーですが、時々もう少しこうだ

特定の時だけSQLの条件を追加するならSet::mergeを使う

SQLの条件を追加したい時に使うのがarray_mergeなどですが、

ページネーションではDISTINCTではなく、GROUP BYを使う

重複したデータを省く時に使うDISTINCTですが、ページ送りで使う時

Model内で別のModelを呼び出す

モデル内で別のモデルを使いたいケースがあった場合、次のようにすることで

CakePHPでGoogleAnalyticsAPIを使う

CakePHPでGoogleAnalyticsを使う方法について見てい

独自のfindを定義するfindMethods

findをより便利に、よりスッキリ書くのに、findMethodsを使

TCPDFを使ってCakePHPでPDFを作成

CakePHPでPDFを作成するには幾つかの方法がありますが、今回はT

JavaScriptをコードの最下部に配置

SEOの観点からJavaScriptのコードは一番下に記述したいところ

無限スクロールをさせる

TwitterやFacebookのタイムラインを見ていて、ページの下に

PHPExcelの導入

ExcelにDBのデータを表示して一覧を作ったり、請求書などのフォーマ

Warning: SplFileInfo::openFile〜の警告が表示されたら

ShellとWEBの両方で同一のModelを呼び出す時に「Warnin

連結されていないデータを抽出

通常、テーブルを連結してデータを取得するには、アソシエーションを利用し

データを取得する

データを取得したい時に少し変わった条件で取得したい場合があります。

PAGE TOP ↑