2005/02/07

Pear::Calendarで日本のカレンダーを作る

ポスト @ 2:14:37 , 修正 @ 2005/02/07 2:26:57 | ,     このエントリーを含むはてなブックマーク

日本での週始めは日曜日だ。
海外では月曜日から始まるらしい。
Pear::Calendarももちろん標準では月曜が週始めに設定されてる(たぶん)
PearマニュアルのCalendarはどうもドキュメントが未作成なのが多くて困る。
GoogleでもPear_Calendarについて書かれているページも少ないような気がする

愚痴はここまで。
で、僕が迷ったのは、週始めを月曜に設定すること。
Calendar_Month_Weeksを使ってthisWeek()でガリガリ月曜にするのは何ともいえないので、なんかいい方法はないかと。
もの凄い勢いでググった。

お急ぎの方用PEAR::Calendar ExamplesPEAR Calendar Exploration - SmartyWikiOpenSource at Virginia Tech などのソースを読みながら、FirstDayという存在を知る。
Koders - Source Code Search Engineで、Calendar FirstDayを検索して自分がバカだということを知った。

今までこんな感じでコード書いてた。

$Month = new Calendar_Month_Weekdays(date('Y'), date('m'));
$Month->build();

echo "<table>";

echo <<< CAL
<tr>
	<th>Sun</th>
	<th>Mon</th>
	<th>Tue</th>
	<th>Wed</th>
	<th>Thu</th>
	<th>Fri</th>
	<th>Sat</th>
</tr>
CAL;

while ($Day = $Month->fetch()) {
    if ($Day->isFirst()) {
        echo "<tr>";
    }

    if ($Day->isEmpty()) {
        echo "<td> </td>";
    } else {
        echo '<td>'.$Day->thisDay()."</td>";
    }

    if ($Day->isLast()) {
        echo "</tr>";
    }
}
echo "</table>";

これだと、2/7が日曜になってしまって、なんかおかしい。
実際に表示されるのはこっち

Sun  Mon  Tue  Wed  Thu  Fri  Sat
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28   

んで、上で書いたようにもの凄い勢いでググって、自分のバカさ加減を知ったんですよ
こんなコードを書くだけで直りやがった!!(ちくしょう!

$Month = new Calendar_Month_Weekdays( date('Y'), date('m'), 0 );
$Month->build();

echo "<table>";

echo <<< CAL
<tr>
	<th>Sun</th>
	<th>Mon</th>
	<th>Tue</th>
	<th>Wed</th>
	<th>Thu</th>
	<th>Fri</th>
	<th>Sat</th>
</tr>
CAL;

while ($Day = $Month->fetch()) {
    if ($Day->isFirst()) {
        echo "<tr>";
    }

    if ($Day->isEmpty()) {
        echo "<td> </td>";
    } else {
        echo '<td>'.$Day->thisDay()."</td>";
    }

    if ($Day->isLast()) {
        echo "</tr>";
    }
}
echo "</table>";

で、結果はこうなった。

Sun  Mon  Tue  Wed  Thu  Fri  Sat
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 

なんてことはない、FirstDayに日曜である0を引数を加えただけ
Calendar_Month_Weekdays( date('Y'), date('m'), 0 );
もうね、バカかと、アホかと。
自分自身を小一時間ほど問い詰めたくなった。
このFirstDayを発見するのだってCalendar/Month/Weekdays.phpのソースを見た時だもん。 :(

なんかこれで表示された時は、感動というより、脱力だった...
マジで英語のドキュメント読めるようになりたい... (TT

今度からドキュメントを熟読してから作成します。
日付と時間 (Date and Time)
constructor Calendar_Month_Weekdays::Calendar_Month_Weekdays
ってことで、オープンソース万歳!!(ってかPear) :p

どうでもいいんだけど、カレンダーって「Calendar」じゃないのかな?
ときどき「Calender」ってなってるんだけど(しかも海外のサイトで)これって誤字なのかな?


3 Trackbacks

Pear::Calendarで、日曜スタートのカレンダーを作る

Pear::Calendarを使用していて、カレンダーが月曜から始まってしまう事に少々悩んでいたのですが、いろいろググった結果「blog.xole.net」さんが解決策を導いてくれました。 Pear::Calendarで日本のカレンダーを作る 結果、 $Month = new Calendar_Month_Weekdays

From : プログラミング・ラボ @ 2006-03-08 02:42:22

[PEAR][PHP]PEARで日曜日スタートのカレンダー

PHPの好きなところに、日付の取り扱いがすごく簡単というところがある。 今回はPEARカレンダーを使ったのでメモ 簡単に扱いたいのでハッシュに変換しました 今月のカレンダーを取得するスクリプト require_once &#39;Calendar/Month/Weekdays.php&#39;; $Month = new Calend

From : レイトマジョリティー日記 @ 2007-03-16 06:59:11

【大人気】航空会社のカレンダー!

毎年航空ファンにもとどまらず、大人気のカレンダー! 年末を待たず、すぐ完売の商品! いよいよ予約の開始! 両方を集めるのは、今のうち! 人気blogランキングへ トップへ

From : バイヤーひでりんのナイショ話 @ 2007-10-17 06:30:11

Track from Your Website

http://blog.xole.net/trackback/tb.php?id=111

Comment

No Comments

Post Your Comment


*は入力必須です。E-Mailは公開されません。

1 + 2 =