ウサヲブログ  HOME

ウェブ制作に関わる備忘録などを綴ります

このページの位置: HomePHP「任意の年月日の日だけを取り出し配列に格納したい」の記事

任意の年月日の日だけを取り出し配列に格納したい

ウサヲです。

日本語版の月別イベントスケジュールを英語版に改良する作業にて、日付の処理で悩み抜いたことを書いておきます。

Advanced Custom Field で設定した日付を配列に入れて、それをカレンダーに表示する、という仕組みです。

もともとは、こちらのフォーラムのソースコードを参考にしたものを、ウサヲにとっての神的存在のウェブ開発の師匠が改良したものです。(ややこしい)

が、それは日本語の年月日のカレンダーであり、Advanced Custom Fieldの日付指定も”yyyy年mm月dd日”とフォーットとして日付が入っているものでした。

これをすべて取っぱらい、yyyymmddのフォーマットにしておいて、さらにその日付だけ配列に格納して色々と処理したい、というものであります。その時の日付の処理でドン詰まったので、備忘録として残す決意を固めました。(わかりづらくて本当にすみません。自分のための備忘録です・・)

こうしてみました。

まず、Advanced Custom Fieldの日付の設定は、yymmddにします。(yyをyyyyにすると20162016となっちゃうので注意)

そして、その日付($eventDate)をキーにして昇順にその他のデータも取り出して、いろいろやって(?!)配列に格納していきます。

配列の0番目に日付を入れるのですが、ここでは年月日ではなく、日だけを格納します。その方法がこちら↓

$dd = date('d', strtotime($eventDate)); // $eventDate の日付だけを取り出す
 preg_match('/\d{2}/' , $dd , $matchDate); // 取り出した日付を文字列にして返します
 $eventData = $matchDate[0]."\t".$eventTitle."\t"; // その他の項目も合わせて入れる
 array_unshift($eventArray, $eventData); // データがある限り、ジャンジャン配列に追加する
 //ちなみにこれはループ処理の中です。

 

他にも方法があるのだと思います。ググってグググってようやくたどり着いた結果ですが、ウサヲのレベルはこの程度であります。

なんでこんなややこしいことをするのだ?

なぜかってそれは、もともとのソースを可能な限り壊したくなかったからです・・。

最初は日付の”年”とか”月”とか”日”を取っ払えばなんとかなるやっ!と思って処理していたのですが、どうも上手く動かない。何が悪いんだろうと探っていくうちにたどりついたのが、配列に格納する際の日付の処理がおかしいことに気づいたのです。

もともと”99日”(漢字月の日付)だった日付データを”99日”のまま配列に格納していた作りだったので、そこに数字の99だけを放り込もうとした時に、不具合が発生したのです。

なので、他のソースを壊さないように、という目的のもと、ここは日付の99は数値ではなく文字列として格納してやる、という処理が必要になった、というわけであります。

・・・多分、他にもっと良い方法があるんだろうなぁ・・。

phpをより詳しくご存知の方からすれば、鼻でせせら笑われるのがオチかもしれませんが、いつの日かウサヲ自身でこの記事のことをせせら笑えるように、記事にして残します。

コメントを残す

日本語でお願いします。「テスト投稿」のような短い文は無視されます。

TOP