Movable Type 備忘録

 GetDate プラグイン

  • Apr112009
  • Vote:
    http://bizcaz.com/archives/2009/04/11-044731.php
  • Categories: Plugins
  • Tags: ,
  • Social Bookmark

こんばんわ^^

日付にまつわるプラグインを作ってみました。
追加される機能は以下の通りです。

  • 今日の日付を取得
  • 任意の日付を作成
  • 任意の日付からX日後(前)の日付を作成
  • 任意の日付の存在チェック
  • 指定日を過ぎたかどうかチェック

ダウンロード

使い方

使い方はカンタンです。
各機能別に説明していきます。

  • MTToday ファンクションタグ

    今日の日付を取得するファンクションタグです。
    YYYY-MM-DD のフォーマットで表示されます。デフォルトの日付に関するモディファイアと併用することができます。

    1. <div><mt:Today></div>
  • MTMakeTime ファンクションタグ

    任意の日付を作成することができます。YYYY-MM-DD のフォーマットで表示されます。デフォルトの日付に関するモディファイアと併用することができます。

    以下のモディファイアを選択してください。

    • date モディファイア
      作成したい日付( YYYY-MM-DD )を指定します。
    • year モディファイア
      作成したい日付の年数を指定します。month、day モディファイアといっしょに使います。省略した場合は、現在の年が利用されます。
    • month モディファイア
      作成したい日付の月数を指定します。year、day モディファイアといっしょに使います。省略した場合は、現在の月が利用されます。
    • day
      作成したい日付の日数を指定します。year、month モディファイアといっしょに使います。省略した場合は、現在の日が利用されます。
    • pass
      任意の日付からX日後(+X)、またはX日前(-X)の日にちを指定して作成します。

    date モディファイアで指定日付作成

    1. <div><mt:MakeTime date="2000-01-01"></div>

    year, month, day モディファイアで指定日付作成

    1. <div><mt:MakeTime year="9" month="3"></div>

    pass モディファイアで 20 日後の日付作成

    1. <div><mt:MakeTime date="2000-01-01" pass="+20"></div>

    pass モディファイアで 20 日前の日付作成

    1. <div><mt:MakeTime date="2000-01-01" pass="-20"></div>
  • MTCheckDate ブロックタグ

    指定した日付が存在するか否かをチェックするブロックタグです。 以下の date モディファイアでチェックしたい日付の存在をチェックするか、year、month、day モディファイアの組み合わせで指定した日付が存在するかチェックすることができます。

    • date モディファイア
      指定した日付( YYYY-MM-DD )が存在するかどうかをチェックします。
    • year モディファイア
      チェックしたい年( YYYY )を指定します。month、day モディファイアと組み合わせて使用します。このモディファイアを省略した場合には現在の年が利用されます。
    • month モディファイア
      チェックしたい月( MM )を指定します。year、day モディファイアと組み合わせて使用します。このモディファイアを省略した場合には現在の月が利用されます。
    • day
      チェックしたい日( DD )を指定します。year、month モディファイアと組み合わせて使用します。指定しなかった場合には現在の日が利用されます。
    1. <div>
    2. <mt:setvar name="date" value="2010-02-28">
    3. <mt:CheckDate date="$date">ok<mt:Else>ng</mt:CheckDate>
    4. </div>
  • MTIsLater ブロックタグ

    指定日( YYYY-MM-DD )を過ぎたかどうかチェックするブロックタグです。 以下の date モディファイアを基準に、year、month、day モディファイアで指定した数値( 日数 )内かどうかをチェックすることができます。

    • date モディファイア
      基準となる日付( YYYY-MM-DD )を指定します。year、month、day モディファイアと併用します。
      指定しなかった場合には今日の日付を基準とします( 常に TRUE となる )。
    • year モディファイア
      チェックしたい年( YYYY )を指定します。
      date モディファイアで指定した日付を基準に、このモディファイアで指定した年数内かどうかチェックできます。
    • month モディファイア
      チェックしたい月( MM )を指定します。
      date モディファイアで指定した日付を基準に、このモディファイアで指定した月数内かどうかチェックできます。
    • day
      チェックしたい日( DD )を指定します。
      date モディファイアで指定した日付を基準に、このモディファイアで指定した日数内かどうかチェックできます。
    1. <div>
    2. <mt:IsLater date="2009-04-11" day="3">
    3. 2009/04/11 から 3 日以内なら表示
    4. </mt:IsLater>
    5. </div>

以上です。
よかったら使ってみてください。

 Trackback Pings(1)

from SOHOカアチャン通信

このサイトの人気No.1は「MT4 カスタムフィールドで日時を取得」なんですが、...

 Comments(28)

#1: Posted by ビリー・トランクス @ April 11, 2009 [REPLY]
user-pic

お久しぶりです。

遅くなりましたが、リンクを貼らせていただいたご報告であります。バイバイ
遠いうちにLinksページをちゃんとつくろうとは思いますが、今のペースでは相当遠い話になりそうです。

それと質問があるのですが、ここにくるまでに「Movabletype備忘録」とぐぐったところ、検索トップの下になんとメニューが表示されるではあーりませんか。

私のHPもそのように設定したいと思うのですが、そんなことできるのでしょうか。
毎回見に来るたびに仰天の機能で驚くばかりです。

私も人に聞いてばかりではなく時間を見ながらもっとしっかりと勉強しないとと思うばかりです。べ~

#2: Posted by Author Profile Page bzbellからビリー・トランクスへの返信 @ April 11, 2009 [REPLY]
user-pic

>>1 ビリー・トランクス さん

こんにちわ^^

> 私のHPもそのように設定したいと思うのですが、そんなことできるのでしょうか。

トップ下のメニューって、「HOME」とか「BROGROLL」ってあるところのメニューのことですよねあせあせ!?
できる、できないで言ったらできると思います。
普通に CSS でデザインしてるだけですのでやあ!
ただし、ビリー・トランクス さんとこの CSS などを把握してないし、ウチとまったく同じというわけにはいきませんけどね。

今ビリー・トランクス さんのサイト見たら、作業中なのかメニューが崩れてましたあせあせ

#3: Posted by カメリア @ April 12, 2009 [REPLY]
user-pic

あのー、使い道が分からないのですが・・・イヤイヤ

/mt/mt.cgiで変更できるんですが・・・。それ以外に何が必要なんですか?

よく分からなくて済みません。

#4: Posted by Author Profile Page bzbellからカメリアへの返信 @ April 12, 2009 [REPLY]
user-pic

>>3 カメリア さん

こんにちわ^^

元々は訪問者さんから相談された内容から作ったプラグインなんです。
なので、すべての人とって有用かというとそうでもないかもしれませんねにこっ!
一応各タグの説明をもう少し詳しく書いてみました。

#5: Posted by ビリー・トランクス @ April 13, 2009 [REPLY]
user-pic

遅くなりました。
何故かコメントできませんでした。

トップ下のメニューとは、自分のサイトのではなく、検索結果の1位に表示されたものです。

Movabletype備忘録
サイト説明・・・・・・・・・・・・・・・・・・・・・・・・・・・・
サイト説明・・・・・・・・・・・・・・・・・・・・・・・・・・・・
メニュー  メニュー
メニュー  メニュー
メニュー  メニュー

こんな感じです。
これは狙って出来るものではないのでしょうか。よろしくお願いします。

#6: Posted by Author Profile Page bzbellからビリー・トランクスへの返信 @ April 13, 2009 [REPLY]
user-pic

>>5 ビリー・トランクス さん

こんばんわ^^

すいませんが、できればメールフォームからご連絡頂けますでしょうか。
ビリー・トランクス さんがご質問されてることはまったく記事とは関係ないのであせあせ

#7: Posted by Hiro @ September 16, 2009 [REPLY]
user-pic

いつも参考にさせていただいています。
mt:Today format="%m"
として月だけを2桁で取得したいのですが、
実際には「2009-09-16 14:26:02」となっていしまいました。
どこか問題があるのでしょうか?

#8: Posted by ネムからHiroへの返信 @ January 31, 2010 [REPLY]
user-pic

便利なプラグインをありがとうございます。
早速、MTIsLater ブロックタグを使用させてもらっていますが、一点ご質問させてください。
date モディファイアに入力した日付が"2009-**-**"の場合は正常に判定されて、"2010-**-**"の場合には判定されずそのまま表示されてしまったのですが、どのような原因が考えられますでしょうか?
また、私も「>>7 Hiro さん」と同様の問題が発生してしまいした。この点についてもご教授いただけますと幸いです。
ちなみに、動作環境はMT5.01となります。

よろしくお願いいたします。

#9: Posted by Author Profile Page bzbellからネムへの返信 @ January 31, 2010 [REPLY]
user-pic

>>8 ネム さん

こんばんわ^^

以下の変更を入れたプラグインを UP( ver1.01 )しましたので、改めて DL してお使い頂けたらと思います。
  1. MTToday の format モディファイアの件ですが、すいません。わたしの不具合ですあせあせ
    また、MTMakeTime でも format は利用可能です。
  2. MTIsLater の件ですが、論理を反転してました。
    たとえば、2010-02-28 は今日( 2010-01-31 )より未来なので NG となり、2009-02-28 は過去なので OK となりますブイブイ
  3. X 日後の日付作成機能を変更しました。

以上です。

#10: Posted by ネム @ February 2, 2010 [REPLY]
user-pic

>>9 bzbell さん

素早いご回答・ご対応ありがとうございました!

早速ダウンロードさせていただきました。
まだ MTToday ファンクションタグの確認しかできていませんが、出力が「2010年12月2-日 02: 1 」となってしまいました(今日の16:00頃です)
私の方に問題があるかもしれませんので引き続き確認させていただきますが、もし何かお分かりになりましたらお知らせいただけますと助かります;;

度々すみませんが、よろしくお願いします。

#11: Posted by bzbellからネムへの返信 @ February 3, 2010 [REPLY]
user-pic

>>10 ネム さん

こんばんわ^^

すいません。わたしのミスでした。
format モディファイアに対応する際に MT の CORE に渡すパラメータにミスがありましたあせあせごめんなさい。
動作確認したバージョン( 1.02 )を UP しましたのでご確認頂けたらと思います。
今後ともどうぞよしなにぺこり

#12: Posted by 森本ミホ @ April 11, 2010 [REPLY]
user-pic

こちらのプラグインをMT4.34で使用させて頂いたのですが、MTTodayをアーカイブインデックスで使用すると再構築時に以下のエラーが表示されてしまいます。

「Can't locate object method "build_date" via package "MT::Template::Context" 」

またMTIsLaterは再構築時にエラーが出ないのですが、機能していないようなので確認して頂けないでしょうか。
宜しくお願い致します。

#13: Posted by Author Profile Page bzbellから森本ミホへの返信 @ April 12, 2010 [REPLY]
user-pic

>>12 森本ミホ さん

こんばんわ^^

お返事が遅くなってすいません。
ご質問の件ですが、GetDate プラグインが MT4.x に対応しなくなってましたあせあせすいません。
先ほど MT4.x と MT5.x 用のプラグインを分割し UP( ver1.03 )しました。
改めてダウンロードしてご確認くださいぺこり

#14: Posted by Pink @ April 23, 2010 [REPLY]
user-pic

お世話になります。
MT4.1にて、GetDataプラグイン(1.03のmt4.x版)を利用させていただこうとしたところ、
リビルド時に

Undefined subroutine &GetDate::_hdlr_date called
at /**/plugins/GetDate/lib/GetDate.pm line 10.

とのエラーが表示されてしまいました
こちら直す方法がありましたらお教え願えますでしょうか
宜しくお願いいたします

#15: Posted by Author Profile Page bzbellからPinkへの返信 @ April 24, 2010 [REPLY]
user-pic

>>14 Pink さん

こんばんわ^^

お返事が遅くなってすいません。
不具合の件ですが対応しましたので、改めて DL して頂きご確認頂けたらと思います。
今後ともどうぞよしなにぺこり

#16: Posted by Pink @ April 24, 2010 [REPLY]
user-pic

ありがとうございます!動作確認できました!
サーバの都合でPHPもSSIも効かず困っておりました。
とても助かりました~。

管理者様の今後ますますのご活躍をお祈り申し上げます。
本当にありがとうございました。

#17: Posted by Akikumo @ April 30, 2010 [REPLY]
user-pic

お世話になります。
現在、投稿日が今日より3日以内のものを別でピックアップして処理するとして以下のように組んだのですが、何故か今日(4/30)が対象外となってしまいました。

mt:EntryDate format="%Y-%m-%d" setvar="upday"
mt:MakeTime format="%Y-%m-%d" date="$upday" pass="4" setvar="pastday"

mt:IsLater date="$pastday"
div style="background-color:#000000;"
mt:IsLater

mt:IsLater date="$pastday" day="3"
div style="background-color:#FF00FF;"
mt:IsLater

私のタグの組み方がおかしいのかもしれませんが、ちょっと分からなかったので質問します。
よろしくお願いします。

#18: Posted by Author Profile Page bzbellからAkikumoへの返信 @ May 1, 2010 [REPLY]
user-pic

>>17 Akikumo さん

こんばんわ^^

ご質問の件ですが、少々使い方が違ってるようですあせあせ
IsLater タグは現在の日付( 今日の日付 )と date モディファイア、または year、month、day モディファイアで指定した日付を比較して、過去か否かをチェックするタグになります。
ですので、Akikumo さんが想定されてる投稿日(任意の日付)から 3 日以内…といった使い方ではないんです。
でも、そのような機能も対応は可能です。対応したらご報告しますので少々お待ちをぺこり

#19: Posted by Author Profile Page bzbellからAkikumoへの返信 @ May 1, 2010 [REPLY]
user-pic

>>17 Akikumo さん

こんにちわ^^

MTIsLater タグに pass モディファイアを追加しました。
これにより Akikumo さんがやりたかったこと!?ができるかと思います。
というより、予め MTMakeTime タグを使って 3 日後の日付を作って date モディファイアで指定して頂ければ実現可能でしたが、そういったことを GetDate プラグインに機能を包含しました。
よかったら使ってみてくださいやあ!

#20: Posted by Akikumoからbzbellへの返信 @ May 3, 2010 [REPLY]
user-pic

>>19 bzbell さん

ご対応ありがとうございます。
質問としましては、その、「今日」と比較して投稿日が「3日以内」なら、という処理をしたかったので、おっしゃるようなことをしたつもりでした。
つまり、投稿日が3日以内か、と、投稿日が3日以降か、を判断するのに、投稿日の4日後の日付を作って、その日付と現在日を比較していたつもりでした。
が、いろいろ試している内に変なコードになってしまったようです。。。
もう一度見直してみます。お手数をお掛けしました。

#21: Posted by きよ @ May 13, 2010 [REPLY]
user-pic

便利なプラグインありがとうございます。
更新日から何日後と表示したいのですが、エラーが出ていまいます。何か対策はありますでしょうか?
<$MTEntryModifiedDate format="%Y-%m-%d"$>(次回更新予定日:<mt:MakeTime date="<$MTEntryModifiedDate format="%Y-%m-%d"$>" pass="+20" format="%Y-%m-%d">)

#22: Posted by Author Profile Page bzbellからきよへの返信 @ May 13, 2010 [REPLY]
user-pic

>>21 きよ さん

こんばんわ^^

すいません…MTMakeTime タグの date モディファイアの、その使い方は間違ってますあせあせ
以下のように変更してみてください。

<$mt:EntryModifiedDate format="%Y-%m-%d" setvar="foo"$>
<mt:MakeTime date="$foo" pass="+20" format="%Y-%m-%d">
以上です。
#23: Posted by きよ @ May 14, 2010 [REPLY]
user-pic

bzbell さん
ご回答ありがとうございます。
早速修正したとことろ、正常に動きました。
たぶん簡単なことだろうと、
素人なりに、何度もやってみてうまくいかなかったので、
本当にありがとうございます。
これでほかにもいろいろ使えます。

#24: Posted by きよ @ May 18, 2010 [REPLY]
user-pic

bzbell さん
度々すみません
掲載日から14日以内は「New」表示がどうしてもうまくいきません。
-----------------------------------------------
<$mt:EntryDate format="%Y-%m-%d" setvar="new"$>
<mt:IsLater date="$new" day="14">
<i>New</i>
</mt:IsLater>
-----------------------------------------------
と記述しています。

#25: Posted by Author Profile Page bzbellからきよへの返信 @ May 18, 2010 [REPLY]
user-pic

>>24 きよ さん

こんばんわ^^

すいません。わたしの不具合がありましたあせあせ改めて ver1.06 を DL して頂き、以下のように使ってください。

<$mt:EntryDate format="%Y-%m-%d" setvar="new"$>
<mt:IsLater date="$new" pass="-14">
14日以下の場合
</mt:IsLater>
#26: Posted by きよ @ May 18, 2010 [REPLY]
user-pic

bzbell さん
こんばんは
早速対応いただきありがとうございます。

すみません。
ver1.06を入れなおして、組み込んで見たのですが、
すべてのデータにNewが表示されています。
ためしたのは以下の記述で
-------------------------------------
<$mt:EntryDate format="%Y-%m-%d" setvar="new"$>
<$MTGetVar name="new"$>
<mt:IsLater date="$new" pass="-14">
<i>New</i>
</mt:IsLater>
-------------------------------------

表示されたのが
-------------------
2010-05-18 New
-------------------
です。
<$MTGetVar name="new"$>
ちゃんとセットされているかの確認なので、
運用時には削除します。

誤りがありましたらお教えいただけますでしょうか。

#27: Posted by Author Profile Page bzbellからきよへの返信 @ May 19, 2010 [REPLY]
user-pic

>>26 きよ さん

こんばんわ^^

わたし、この mt:IsLater というタグの目的を見失ってしまって何がしたいのかわからなくなっちゃいました。
ですので、根本的に考え直したくお時間頂けますか。
ご迷惑をお掛けしてすいませんぺこり

#28: Posted by きよ @ May 20, 2010 [REPLY]
user-pic

bzbell さん
お手数をおかけしてすみません。
現在は
「石輪っぷり!」さんのソース
<mt:SetVarBlock name="today"><$mt:Date format="%Y%j"%></mt:SetVarBlock>
<mt:SetVarBlock name="passed"><$mt:EntryDate format="%Y%j"%></mt:SetVarBlock>
<mt:SetVar name="passed" value="$today" op="sub">
<mt:If name="passed" ge="-14">
<i>New</i>
</mt:If>
<mt:If name="passed" ge="-649">
<mt:If name="passed" le="-635">
<i>New</i>
</mt:If>
</mt:If>
を利用させていただいています。
でもGetDateの方がソースを整理するには、明快なので使えるようになるとありがたいなと思っています。
それにしても、多くの方の善意でうちのMTもいろいろ出来てます。
本当にありがとうございます。

 Post a Comment

 

コメント用フィード