質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Smarty

Smartyは、PHPアプリケーションで使用されるテンプレートエンジンです。

Q&A

解決済

4回答

1508閲覧

Smartyでの日付管理(来月、来年等)について

yggd0114

総合スコア91

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Smarty

Smartyは、PHPアプリケーションで使用されるテンプレートエンジンです。

0グッド

0クリップ

投稿2019/06/18 07:24

Smartyで来月や再来月の日付取得はどのように行うのが良いのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答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
CHERRY

総合スコア25171

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Smartyはあくまで画面表示を担当するテンプレートエンジンなので、
処理系をゴリゴリ書くのは向きません。

それに結局は裏でPHPが動いています。
Smarty内でPHPの標準関数を利用することもできますが({(第一引数)|(関数名):(第二引数):(第三引数):(第四引数):...}という形式)

テンプレートエンジンを使う理由って、処理・ロジック部分と画面表示・ビュー部分の分離するためという理由が大きいはずなので、あまりゴリゴリと計算処理を書くのは好ましくありません。

コントローラ側(PHP)で計算してSmartyにassignし、結果だけ表示するのが良いでしょう。

投稿2019/06/18 10:05

編集2019/06/18 10:06
m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Smartyは、プレゼンテーションからアプリケーションのロジックとコンテンツを分離して管理する事を目的としています。ですのでSmartyで日付取得すると言う事は、phpのロジック部分で日付を設定してSmartyのコンテンツ部分で表示する事になります。ちなみにコンテンツ部分でのJavaScriptなどでも取得する事は可能です。

投稿2019/06/18 09:21

hide0128

総合スコア245

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

PHP

1strtotime("+1 month")

投稿2019/06/18 08:20

kasa0

総合スコア578

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yggd0114

2019/06/18 08:25

Smartyでこちらの記述ができるのでしょうか? php側でならば可能なことはわかってます。
kasa0

2019/06/18 08:31

SmartyのテンプレートからでもPHPの関数は呼び出せますよ。
yggd0114

2019/06/18 08:46

PHP関数を利用するしかないということでしょうか?
kasa0

2019/06/19 08:29

本当にSmarty側で計算したいのならそうするしか無いですが、そもそもPHPで処理したデータをSmartyで標示だけするようにするべきです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問