<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
    xmlns:admin="http://webns.net/mvcb/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
<title>ハタさんのブログ(復刻版)</title>
<link>http://blog.xole.net/index.php</link>
<pubDate>Mon, 07 Feb 2005 02:14:37 </pubDate>
<description>
ハタさんのブログ(復刻版) - RSS 2.0 (Really Simple Syndication).
</description>
<item>
<title>Pear::Calendarで日本のカレンダーを作る</title>
<link>http://blog.xole.net/article.php?id=111</link>
<pubDate>Mon, 07 Feb 2005 02:14:37 +09:00</pubDate>
<description>日本での週始めは日曜日だ。
海外では月曜日から始まるらしい。
Pear::Calendarももちろん標準では月曜が週始めに設定されてる(たぶん)
PearマニュアルのCalendarはどうもドキュメントが未作成なのが多くて困る。
G...</description>
<content:encoded>
<![CDATA[<p>日本での週始めは日曜日だ。<br />
海外では月曜日から始まるらしい。<br />
Pear::Calendarももちろん標準では月曜が週始めに設定されてる(たぶん)<br />
PearマニュアルのCalendarはどうもドキュメントが未作成なのが多くて困る。<br />
GoogleでもPear_Calendarについて書かれているページも少ないような気がする</p>

<p>愚痴はここまで。<br />
で、僕が迷ったのは、週始めを月曜に設定すること。<br />
<code>Calendar_Month_Weeks</code>を使って<code>thisWeek()</code>でガリガリ月曜にするのは何ともいえないので、なんかいい方法はないかと。<br />
もの凄い勢いでググった。</p>

<p>
<a href="http://www.1x1.jp/php/manual_pear/package.datetime.calendar.intro-inahurry.html" title="お急ぎの方用">お急ぎの方用</a>や
<a href="http://pearcalendar.sourceforge.net/examples/" title="PEAR::Calendar Examples">PEAR::Calendar Examples</a>、
<a href="http://smarty.incutio.com/?page=PEARCalendarExploration" title="PEAR Calendar Exploration - SmartyWiki">PEAR Calendar Exploration - SmartyWiki</a>、
<a href="http://www.opensource.isc.vt.edu/products/vtcalendar/" title="OpenSource at Virginia Tech">OpenSource at Virginia Tech</a>
などのソースを読みながら、<code>FirstDay</code>という存在を知る。<br />
<a href="http://www.koders.com/" title="Koders - Source Code Search Engine">Koders - Source Code Search Engine</a>で、<code>Calendar FirstDay</code>を検索して自分がバカだということを知った。</p>

<p>今までこんな感じでコード書いてた。</p>

<pre>
<code>$Month = new Calendar_Month_Weekdays(date('Y'), date('m'));
$Month-&gt;build();

echo "&lt;table&gt;";

echo &lt;&lt;&lt; CAL
&lt;tr&gt;
	&lt;th&gt;Sun&lt;/th&gt;
	&lt;th&gt;Mon&lt;/th&gt;
	&lt;th&gt;Tue&lt;/th&gt;
	&lt;th&gt;Wed&lt;/th&gt;
	&lt;th&gt;Thu&lt;/th&gt;
	&lt;th&gt;Fri&lt;/th&gt;
	&lt;th&gt;Sat&lt;/th&gt;
&lt;/tr&gt;
CAL;

while ($Day = $Month-&gt;fetch()) {
    if ($Day-&gt;isFirst()) {
        echo "&lt;tr&gt;";
    }

    if ($Day-&gt;isEmpty()) {
        echo "&lt;td&gt;&nbsp;&lt;/td&gt;";
    } else {
        echo '&lt;td&gt;'.$Day-&gt;thisDay()."&lt;/td&gt;";
    }

    if ($Day-&gt;isLast()) {
        echo "&lt;/tr&gt;";
    }
}
echo "&lt;/table&gt;";</code>
</pre>

<p>これだと、2/7が日曜になってしまって、なんかおかしい。<br />
実際に表示されるのはこっち</p>

<pre>
<code>Sun&nbsp;&nbsp;Mon&nbsp;&nbsp;Tue&nbsp;&nbsp;Wed&nbsp;&nbsp;Thu&nbsp;&nbsp;Fri&nbsp;&nbsp;Sat
&nbsp;&nbsp;1&nbsp;2&nbsp;3&nbsp;4&nbsp;5&nbsp;6
7&nbsp;8&nbsp;9&nbsp;10&nbsp;11&nbsp;12&nbsp;13
14&nbsp;15&nbsp;16&nbsp;17&nbsp;18&nbsp;19&nbsp;20
21&nbsp;22&nbsp;23&nbsp;24&nbsp;25&nbsp;26&nbsp;27
28&nbsp;&nbsp;&nbsp;</code>
</pre>

<p>んで、上で書いたようにもの凄い勢いでググって、自分のバカさ加減を知ったんですよ<br />
こんなコードを書くだけで直りやがった！！(ちくしょう！</p>

<pre>
<code>$Month = new Calendar_Month_Weekdays( date('Y'), date('m'), 0 );
$Month-&gt;build();

echo "&lt;table&gt;";

echo &lt;&lt;&lt; CAL
&lt;tr&gt;
	&lt;th&gt;Sun&lt;/th&gt;
	&lt;th&gt;Mon&lt;/th&gt;
	&lt;th&gt;Tue&lt;/th&gt;
	&lt;th&gt;Wed&lt;/th&gt;
	&lt;th&gt;Thu&lt;/th&gt;
	&lt;th&gt;Fri&lt;/th&gt;
	&lt;th&gt;Sat&lt;/th&gt;
&lt;/tr&gt;
CAL;

while ($Day = $Month-&gt;fetch()) {
    if ($Day-&gt;isFirst()) {
        echo "&lt;tr&gt;";
    }

    if ($Day-&gt;isEmpty()) {
        echo "&lt;td&gt;&nbsp;&lt;/td&gt;";
    } else {
        echo '&lt;td&gt;'.$Day-&gt;thisDay()."&lt;/td&gt;";
    }

    if ($Day-&gt;isLast()) {
        echo "&lt;/tr&gt;";
    }
}
echo "&lt;/table&gt;";</code>
</pre>

<p>で、結果はこうなった。</p>
<pre>
<code>Sun&nbsp;&nbsp;Mon&nbsp;&nbsp;Tue&nbsp;&nbsp;Wed&nbsp;&nbsp;Thu&nbsp;&nbsp;Fri&nbsp;&nbsp;Sat
&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;2&nbsp;3&nbsp;4&nbsp;5
6&nbsp;7&nbsp;8&nbsp;9&nbsp;10&nbsp;11&nbsp;12
13&nbsp;14&nbsp;15&nbsp;16&nbsp;17&nbsp;18&nbsp;19
20&nbsp;21&nbsp;22&nbsp;23&nbsp;24&nbsp;25&nbsp;26
27&nbsp;28&nbsp;</code>
</pre>

<p>なんてことはない、<code>FirstDay</code>に日曜である<code>0</code>を引数を加えただけ<br />
<code>Calendar_Month_Weekdays( date('Y'), date('m'), 0 );</code>
<br />
もうね、バカかと、アホかと。<br />
自分自身を小一時間ほど問い詰めたくなった。<br />
この<code>FirstDay</code>を発見するのだって<code>Calendar/Month/Weekdays.php</code>のソースを見た時だもん。 :( </p>

<p>なんかこれで表示された時は、感動というより、脱力だった...<br />
マジで英語のドキュメント読めるようになりたい... (TT </p>

<p>今度からドキュメントを熟読してから作成します。<br />
<a href="http://www.1x1.jp/php/manual_pear/package.datetime.html#package.datetime.calendar" title="日付と時間 (Date and Time)">日付と時間 (Date and Time)</a>
<br />
<a href="http://www.1x1.jp/php/manual_pear/package.datetime.calendar.calendar-month-weekdays.calendar-month-weekdays.html" title="constructor Calendar_Month_Weekdays::Calendar_Month_Weekdays">constructor Calendar_Month_Weekdays::Calendar_Month_Weekdays</a>
<br />
ってことで、オープンソース万歳！！(ってかPear) :p</p>

<ins>
<p>どうでもいいんだけど、カレンダーって「Calendar」じゃないのかな？<br />
ときどき「Calender」ってなってるんだけど(しかも海外のサイトで)これって誤字なのかな？</p>
</ins>]]>
</content:encoded>
</item>
</channel>
</rss>