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

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

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

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

Q&A

解決済

2回答

4809閲覧

Smartyでdate_formatを使った年月取得

Takanori

総合スコア26

Smarty

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

0グッド

0クリップ

投稿2015/08/24 08:31

Smartyのdate_formatを使用して年月を取得しようとしています。

date_format:"%Y年%m月" →2015年08月

上記の様な08月ではなく8月と表示したい為、下記の様に指定

date_format:"%Y年%-m月"

-を前につけると0を消して表示できるということを調べ、実行してみた所下記のエラーが表示されてしまいます。

Warning: Invalid CRT parameters detected in

osはwindows7です。

どなたか対応策をご教示頂けませんでしょうか。

何卒宜しくお願い申し上げます。

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

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

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

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

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

guest

回答2

0

ベストアンサー

Smarty の date_format はとても気持ち悪い実装になっておりまして・・・次のようにしても大丈夫です。

{$hoge.hoge_start|date_format:"Y年n月"}

※Smarty2 だとどうなのかは判りません。


Warning: Invalid CRT parameters detected

なお、このエラーは恐らく下記の理由により発生しています。

  • Smarty の date_format は(普通は)PHP の strftime を使用している
  • PHP の strftime は OS の strftime を使用している
  • Windows と Linux で strftime で使用可能な書式が微妙に違う

一方 date_format% を使わなければ PHP の date が使われます。

PHP の date は PHP 内部で実装されているので(だったはず)、strftime のような OS に依存する問題は起こりにくいです。

投稿2015/08/24 09:34

編集2015/08/24 09:45
ngyuki

総合スコア4514

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

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

退会済みユーザー

退会済みユーザー

2015/08/24 09:43

おや?そうでしたっけ?? と思ったら、%なしだといけたw
ngyuki

2015/08/24 09:50

% の有無で strftime と date を使い分ける気持ち悪い実装になってます。 https://github.com/smarty-php/smarty/blob/v3.1.27/libs/plugins/modifier.date_format.php#L46 更に、入力値の方もすごい頑張っていろんな形式を受け入れるようになっていて・・・もうこの修飾子がどのような動作をするのか正確に把握するのは困難です(^_^;) https://github.com/smarty-php/smarty/blob/v3.1.27/libs/plugins/shared.make_timestamp.php#L26-L32
退会済みユーザー

退会済みユーザー

2015/08/24 10:02

自分も未だSMARTYバリバリ使ってるんですが、カスタムプラグイン自作してそればっかり使ってるもんだからデフォの装飾子は疎くなってしまってましたね…。 業務アプリだと、和暦に変換しなきゃいけなかったりして。
Takanori

2015/08/25 15:06

ご返信が遅くなりまして、申し訳ありません。 エラーに対するご回答がすごく参考になりました。 解決致しました。ありがとうございました。
guest

0

php

1date_format:"%Y年%m月" →2015年08月 ←全角にはならないはずですが…

php

1date_format:"%Y年%n月"

と思ったら、違った…すみません。

php

1{date('Y年n月', $datetime)}

リファレンス読もうね

投稿2015/08/24 08:35

編集2015/08/24 08:43
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Takanori

2015/08/24 09:08

ご回答ありがとうございます。 現状下記の様に記載していますが {$hoge.hoge_start|date_format:"%Y年%m月"} ご回答頂きました記述はどのように記載すればよろしいでしょうか? また追加のご質問となって申し訳ないのですが 現在の月の初日~月末日をfrom~toで出力したい場合はどのように 記述したらよいでしょうか?(2015年8月1日~2015年8月31日) リファレンスを読んでも解決できず ご質問させて頂きました。 基本的なご質問で申し訳ありませんが 再度ご教示頂ければ幸いです。
退会済みユーザー

退会済みユーザー

2015/08/24 09:13 編集

$hoge.hoge_start が timestamp である前提で。 {date('Y年n月', $hoge.hoge_start)} > 現在の月の初日~月末日をfrom~toで出力したい場合はどのように 記述したらよいでしょうか?(2015年8月1日~2015年8月31日) {date('Y年n月j日', $hoge.hoge_start)|cat:'〜'|cat:(date('Y年n月j日', $hoge.hoge_end))} 終わりの方は変数名が提示されていないので、適当に。
Takanori

2015/08/25 15:07

ご返信遅くなりまして、申し訳ありませんでした。 無事解決致しました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問