1

ユーザーがスケジュールを保存できるようにする必要がある CMS を構築しています。インターフェイスは MS Outlook に似ているため、定期的なスケジュールは、その UI がサポートできるものをほぼ模倣する必要があります。

スケジュールが保存されると、イベントが発生するときにアラートを受け取る必要があります。現時点では、cron ジョブを毎分実行して、その分にイベントがスケジュールされているかどうかを確認する予定です。

ユーザーは世界中にいるため、このスケジューリング システムはタイム ゾーンと DST に対応している必要があります。

また、このスケジュールを人間が読めるテキストに変換する機能 (たとえば、「2010 年 1 月 1 日から 2010 年 2 月 1 日まで毎日午前 9 時」) は、ユーザーにとって便利です。

これを実装する方法を知っている人はいますか? PHP/MySQL を使用しています。

4

2 に答える 2

1

何を指定できるかについては、 iCalendarの仕様を参照してください。

于 2010-02-10T18:35:37.067 に答える
1

あなたの質問は求人掲示板への投稿のように見えます。

あなたがやろうとしていることは、それほど複雑ではありません。おそらく名前、説明、開始タイムスタンプ、終了タイムスタンプ、「繰り返し」ブール値など、appts を格納する MySQL テーブルをセットアップするだけです。Ajax を使用して、任意の時間間隔でデータベースにクエリを実行し、予定が近づいているかどうかを確認します。true の場合、ユーザーに通知します。

時間のフォーマットについては、次のようにすることができます。

function format_date($timestamp1, $timestamp2,$repeating) {
    $str = "";
    if($repeating) {
        $str .= "Every Day";
    }
    $str .= "From ".date("g:i a",$timestamp1)." To ".date("g:i a",$timestamp2);
    return ($str);
}

確認できるいくつかのクエリと、いくつかのテーブル作成 SQL を次に示します。

CREATE TABLE `appointments` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `name` varchar(255) DEFAULT NULL,
    `description` text,
    `recurring` int(11) DEFAULT NULL,
    `recurrence_type` varchar(50) DEFAULT NULL,
    `starting_timestamp` int(14) DEFAULT NULL,
    `ending_timestamp` int(14) DEFAULT NULL,
    `end_recurring_timestamp` int(14) DEFAULT NULL,
    PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=latin1

mysql_query("SELECT * FROM appointments 
WHERE recurring=0 
AND starting_timestamp <= ". time() + 86400 ." 
AND starting_timestamp > ". time() ." 
ORDER BY starting_timestamp DESC");

mysql_query("SELECT * FROM appointments 
WHERE recurring=1 
AND recurrence_type='DAILY' 
AND starting_timestamp <= ". time() + 86400 ." 
AND end_recurring_timestamp > ". time() ." 
ORDER BY starting_timestamp DESC");

毎週および毎月の繰り返しはより複雑になり、SQL クエリ以外での操作が必要になる可能性があります。これは、より高いオーバーヘッドを意味する場合があります。

この例では、日付をタイムスタンプとして保存しています。ただし、それらを文字列として保存し、strtotime() などを使用する方が適切な場合があります。ただし、その機能がどれほど信頼できるかはわかりません。

あなたはアイデアを得ることができます。タイムゾーンのサポートについては、 http://www.ultramegatech.com/blog/2009/04/working-with-time-zones-in-php/およびhttp://www.php.net/manual/en/を確認してください。 class.datetimezone.php

于 2010-02-10T18:45:25.800 に答える