Smartyで来月や再来月の日付取得はどのように行うのが良いのでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
ベストアンサー
Smarty マニュアル をみると Smarty には、日付を計算する関数は用意されていないので、すでに記載されている通り PHP の strtotime
関数を使うのが、普通の方法でしょうか。
(あまり薦めませんが...)テンプレートの中で PHP 関数を実行する例としては、
{php} $nextmonth = strtotime("+1 month"); $this->assign('nextMonth',$nextmonth); {/php} {$nextMonth|date_format:"%Y/%m/%d"}
どうしても PHP ではなく Smarty の中で日付の計算処理をしたいということであれば、math関数 で、簡単な計算ができるので、自分で日付の計算式を書くことで日付計算はできると思います。( $smarty.now に対して、必要な日数分の秒数を加算・減算する )
たとえば、30日後の日付を表示。
{math equation="today + (days * 24 * 3600)" today=$smarty.now days=30 assign="nextdays"} {$nextdays|date_format:"%Y/%m/%d"}
前後1〜2週間の日付ならともかく、3ヶ月後や1年後となると 月の日数(28日〜31日)の判別やうるう年等の処理も自分で処理しないとダメなので、素直に PHP で計算して、テンプレート変数に割り当てるのが無難だと思います。
投稿2019/06/18 10:16
編集2019/06/18 10:20総合スコア25171
0
Smartyはあくまで画面表示を担当するテンプレートエンジンなので、
処理系をゴリゴリ書くのは向きません。
それに結局は裏でPHPが動いています。
Smarty内でPHPの標準関数を利用することもできますが({(第一引数)|(関数名):(第二引数):(第三引数):(第四引数):...}
という形式)
テンプレートエンジンを使う理由って、処理・ロジック部分と画面表示・ビュー部分の分離するためという理由が大きいはずなので、あまりゴリゴリと計算処理を書くのは好ましくありません。
コントローラ側(PHP)で計算してSmartyにassignし、結果だけ表示するのが良いでしょう。
投稿2019/06/18 10:05
編集2019/06/18 10:06総合スコア80850
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
PHP
1strtotime("+1 month")
投稿2019/06/18 08:20
総合スコア578
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。