2005/02/07
Pear::Calendarで日本のカレンダーを作る
日本での週始めは日曜日だ。
海外では月曜日から始まるらしい。
Pear::Calendarももちろん標準では月曜が週始めに設定されてる(たぶん)
PearマニュアルのCalendarはどうもドキュメントが未作成なのが多くて困る。
GoogleでもPear_Calendarについて書かれているページも少ないような気がする
愚痴はここまで。
で、僕が迷ったのは、週始めを月曜に設定すること。
Calendar_Month_Weeksを使ってthisWeek()でガリガリ月曜にするのは何ともいえないので、なんかいい方法はないかと。
もの凄い勢いでググった。
お急ぎの方用や
PEAR::Calendar Examples、
PEAR Calendar Exploration - SmartyWiki、
OpenSource 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
[PEAR][PHP]PEARで日曜日スタートのカレンダー
PHPの好きなところに、日付の取り扱いがすごく簡単というところがある。 今回はPEARカレンダーを使ったのでメモ 簡単に扱いたいのでハッシュに変換しました 今月のカレンダーを取得するスクリプト require_once 'Calendar/Month/Weekdays.php'; $Month = new Calend
【大人気】航空会社のカレンダー!
毎年航空ファンにもとどまらず、大人気のカレンダー! 年末を待たず、すぐ完売の商品! いよいよ予約の開始! 両方を集めるのは、今のうち! 人気blogランキングへ トップへ
Track from Your Website
http://blog.xole.net/trackback/tb.php?id=111

Comment
No Comments