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

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

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

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

Smarty

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

Q&A

解決済

4回答

4370閲覧

Smartyのテンプレート側で文字列と日付の比較をしたい

ponpoko_3

総合スコア12

PHP

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

Smarty

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

0グッド

0クリップ

投稿2016/11/01 07:53

初投稿です。よろしくお願いします。

本来PHP側で操作すべきと思いますが
仕事の都合上、Smartyのテンプレート側でやらねばならず、ご相談です。

###前提・実現したいこと
Smartyのテンプレート側で
文字列「2016年9月1日(木)~」や「2016年11月01日(火)~」と
現在日時を比較して、現在日時より前なら表示しないという事をやりたいと思っています。
※文字列は必ず「yyyy年m月d日」という文字から始まります
※ただし月と日は0埋めの時も、0埋めでない時もあります

###該当のソースコード

{if $カラム名|mb_substr:0:11 > $smarty.now|date_format:"%Y年%m月%d日" } {if ($カラム名|mb_substr:6:1 != '月' && $カラム名|mb_substr:0:11 > $smarty.now|date_format:"%Y年%m月%d日") or ($カラム名|mb_substr:6:1 == '月' && $カラム名|mb_substr:0:9 > $smarty.now|date_format:"%Y年%-m月%-d日")}

###試したこと
1つ目のコードだとそもそも0埋めでないケースに対応できていません

Smartyのdate_format:"%Y年%m月%d日"が必ず0埋めで認識されるという情報を見かけたため
試しに2つ目のコードにしてみましたが
この判定では効きませんでした。

###補足情報(言語/FW/ツール等のバージョンなど)
Smarty2.6.28
PHP5.4.45
RCMS

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

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

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

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

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

guest

回答4

0

ベストアンサー

年、月、日を別々に取得して、月、日は0埋めして、連結した文字列を比較してはどうでしょうか?

追記
最初の回答と変わってしまいますが、下記のように年月日を消して比較するのはどうでしょうか?

{if $カラム名|replace:"年":"/"|replace:"月":"/"|replace:"日":""|date_format:"%Y%m%d" > $smarty.now|date_format:"%Y%m%d"}

投稿2016/11/01 07:59

編集2016/11/01 09:07
himakuma

総合スコア952

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

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

ponpoko_3

2016/11/01 08:40

迅速なご回答ありがとうございます。 この方法がシンプルで良いと思うのですが、Smartyのテンプレート内でこの上記の処理は可能なのでしょうか。
ponpoko_3

2016/11/01 09:15

追記いただいた方法で試したところ、きれいに出来ました。 やはりPHPで記載するしかないかとあきらめかけていたので、大変助かりました。 本当にありがとうございます。
guest

0

自分なら、カスタム・プラグインを使いますね。

php

1<?php 2 3/** 4 * function.my_date_format.php 5 * @since 2016/11/01 6 */ 7function smarty_function_my_date_format($params) 8{ 9 $from = (isset($params['from'])) ? $params['from'] : null; 10 $to = (isset($params['to'])) ? $params['to'] : null; 11 12 $week = array('日', '月', '火', '水', '木', '金', '土'); 13 14 $objFrom = new DateTime($from); 15 $objTo = new DateTime($to); 16 17 if ($objFrom > new DateTime() && $objTo > new DateTime()) { 18 return sprintf('%s〜%s' 19 , $objFrom->format(sprintf('Y年m月d日(%s)', $week[$objFrom->format('w')])) 20 , $objTo->format(sprintf('Y年m月d日(%s)', $week[$objFrom->format('w')])) 21 ); 22 } 23}

tpl

1{my_date_format from='2017-09-01' to='2017-12-28'}

投稿2016/11/01 09:04

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

ponpoko_3

2016/11/01 09:17

なるほど、function追加して実装するやり方もあるのですね。 大変勉強になります。 今回はほかの方法をとってしまいましたが、本来はPHPで書くべきですし、今後参考にしたいと思います。 ありがとうございます。
guest

0

smartyはあくまでテンプレートエンジンなのであまり複雑なphp処理はやりにくいと思います。
それでも複雑な処理をしないといけなければ、最近smarty使ってないので少し記憶曖昧ですが

{php} ここでは生のphp使えたはずです。 {/php}

投稿2016/11/01 08:00

hiim

総合スコア1689

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

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

ponpoko_3

2016/11/01 08:44

ご回答ありがとうございます。 phpで記載した方が早いかもしれませんね。。 色々分かっておらず大変恐縮なのですが、 テンプレート内で生のphpを使った場合、PHPで一連の生成処理を書くと思うのですが その結果をSmartyの判定文で使うことはできるのしょうか。
hiim

2016/11/01 08:48 編集

たとえば、公式では http://www.smarty.net/docsv2/ja/language.function.php.tpl こんな感じでアサインしてますね。 smartyの組み込み関数は単純な処理しか考えてないので、複雑な処理はphp側に任せる方が良いと思います。smartyの機能内でやろうと思うと可読性が余計に落ちそうな気がします、、、
ponpoko_3

2016/11/01 08:53

何度もありがとうございます。 この方法でもう少し試行錯誤してみます。 しかし本来はやはりPHP側で行うべき処理ですね。 すぐご回答くださり、ありがとうございました。
guest

0

  1. 年、月を「-0」に置換
  2. 「00」を「0」に置換
  3. 「-」を「」に置換
  4. 日以降を削除

とか。

投稿2016/11/01 08:05

kei344

総合スコア69407

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

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

ponpoko_3

2016/11/01 08:54

迅速なご回答、ありがとうございます。 今回他の方ベストアンサーにさせていただきましたが、大変助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問