導入

導入 – どのようなことがカレンダークラスでできるのか

導入

PEAR::Calendar のいくつかのクラスは、 PEAR::Date がを必要とします。 PEAR::Date 1.3.1beta は、 いくつかのファイルが足りないために動作しないでしょう。 確実に動作させるためには、 PEAR::Date 1.4 以降がインストールされていなければなりません。

PEAR::Calendar は、 構造化されたデータとして何種類かの形式のカレンダーを 提供するパッケージです。 このパッケージは、コンテンツのレンダリングをしたり 既存のデータに依存したりすることがありません。 そのために様々な分野の問題に応用することができます。 同時に、レンダリングを行う簡単な API を提供します。 たとえば、HTML のカレンダーを作成するのも非常に簡単です。 また、このカレンダーをあなたのデータと連動させることも可能です。

PEAR::Calendar を開発した理由は、PHP に似たものが無かったからです。 パブリックドメインのカレンダーユーティリティやクラスは多く存在します。 しかし、その多くは特定の出力形式に制限されていたり (よくあるのはコードを書き直さないとカスタマイズできない HTML 形式です)、 あらかじめ整形されたデータ構造で (たとえば MySQL みたいな) データベースに保存されたデータに依存したりしています。 このために、 利用しようとする際にかなり制限されてしまうという問題があります。 対称的に、PEAR::Calendar はカレンダーを作成する作業から 数学的な要素を除くことに焦点をあてています。 エンドユーザは、これによって簡単にデータ構造を処理できるようになります。

PEAR::Calendar の持つ利点と特徴は、次のようになります。

  • 出力形式を自由にレンダリングすることができます (例. (X)HTML, WML, SOAP, XML-RPC, コマンドラインの ASCII など、何でも)。
  • カレンダーの作成は、 データベースのクエリでの結果をループさせることと似ています。
  • 年から秒まですべての「データオブジェクト」を表せます (例. 月と日からなる完全な1年間のカレンダーや週ごとや、 日別の日記を同じようにレンダリングすることができます)。
  • "表形式"のカレンダーが簡単にできます。
  • 日付の妥当性検証が簡単にできます (2003 年 2 月 29 日ってありましたっけ?)。
  • ガリガリコードを書かないですむ、 オブジェクト指向APIが利用できます。
  • カレンダーに容易にナビゲーションを追加することができます (例. 2004 年 1 月 1 日から 2003 年 12 月 31 日へのリンクを作るのも簡単です)。
  • すべての呼び出しで数値を返します。このことで利用時に制限がなくなります。たとえば月の英語での名前をなどを一致させないでも利用できます。概して、これらは strftime()setlocale() のような PHP 関数を利用することで生成することができます。
  • 日付の表現は、人が読みやすい数字の形式やタイムスタンプ形式 (例. Unix タイムスタンプ) で得ることができます。これらは使用するカレンダーエンジンに依存します。
  • デコレータ (Decorator) を作成することでカレンダーに独自の機能を付け加えることができます。
  • 階層化された N 階層アプリケーションを書くことができます。
  • このカレンダーの「計算エンジン」は、グレゴリオ暦だけに限られるものではありません。もし望むならトールキンのカレンダーを記述することもできます。現状では「エンジン」は Unix タイムスタンプ (デフォルト) と PEAR::Date に基づいて実装されています。

単純な例

<?php
require_once 'Calendar/Month.php';

$Month = new Calendar_Month(200310); // 2003年10月

$Month->build(); // その次の日付を作成します

// 日ごとにループ処理します
while ($Day $Month->fetch()) {
    echo 
$Day->thisDay().'<br />';
}
?>

注意: PEAR::Calendar パッケージのファイル中には、さまざまな例が含まれています。

Calendar (Previous) PEAR::Calendar のインストール方法 (Next)
Last updated: Tue, 29 Jul 2014 — Download Documentation
Do you think that something on this page is wrong? Please file a bug report or add a note.
View this page in:

User Notes:

Note by: jacob-nospam@keystreams.com
function siteMapDailyDeals($startyear = 1999)
{

$html = '';

for ($year = $startyear; $year <= date('Y'); $year++) {

$months = new Calendar_Year($year);
$months->build();

$html .= '<ul>';
while($month = $months->fetch()) {

if (date('Ym', $month->thisMonth(true)) <= date('Ym')) {

$html .= '<li>' . date('F, Y', $month->thisMonth(true)) . '</li>';

$days = new Calendar_Month($month->thisYear(), $month->thisMonth());
$days->build();

$html .= '<ul>';
while ($day = $days->fetch()) {

if (date('Ymd', $day->thisDay(true)) > date('Ymd')) return $html; // we've hit the last day (today)

$html .= '<li>' . date('F jS, D', $day->thisDay(true)) . '</li>';

}

$html .= '</ul>';

}

}

$html .= '</ul>';

}


return $html;

}

echo siteMapDailyDeals();

This displays:

# January, 1999

* January 1st, Fri
* January 2nd, Sat
* January 3rd, Sun
* January 4th, Mon
* January 5th, Tue
* January 6th, Wed
* January 7th, Thu
* January 8th, Fri
* January 9th, Sat
* January 10th, Sun
* January 11th, Mon... and so on until the current date