6

私は現在書き直している Web スケジューリング アプリを持っており、定期的な予定の操作方法についていくつか質問があります (定期的なアプリに関しては、「これを行うための最良の方法は何か」に事欠きません)。

そのため、ユーザーが6 月 2 日土曜日のような日付の予定をスケジュールできる定期的な予定を提供したいと思います。これは、事前に決められた期間 (1 年など) の間、土曜日に隔週で繰り返す必要があります。

「隔週の土曜日」がどの日付になるかを判断するのに役立つphp関数は何ですか? 明確にするために、UI の写真を添付し​​ます。

ここに画像の説明を入力

4

3 に答える 3

19

個人的には、 DateTimeオブジェクトを操作し、DateIntervalクラスを使用したいと考えています。

上記の場合、最初/次の土曜日の日付を計算する必要があり、P2W の日付間隔で作業するだけです

基本的な例

$dow   = 'saturday';
$step  = 2;
$unit  = 'W';

$start = new DateTime('2012-06-02');
$end   = clone $start;

$start->modify($dow); // Move to first occurence
$end->add(new DateInterval('P1Y')); // Move to 1 year from start

$interval = new DateInterval("P{$step}{$unit}");
$period   = new DatePeriod($start, $interval, $end);

foreach ($period as $date) {
    echo $date->format('D, d M Y'), PHP_EOL;
}

/*
Sat, 02 Jun 2012
Sat, 16 Jun 2012
Sat, 30 Jun 2012
Sat, 14 Jul 2012
…
Sat, 20 Apr 2013
Sat, 04 May 2013
Sat, 18 May 2013
Sat, 01 Jun 2013
*/
于 2012-06-02T08:57:38.050 に答える
0

データベース列を使用して、時間を秒単位で保存できます。

UPDATE appointments SET dtime=UNIX_TIMESTAMP() WHERE id=5

次に、特定の期間がちょうど来た/過ぎたところならどこでもこの値をチェックすることができます:

mysql_query("SELECT id FROM appointments WHERE dtime>='".(strtotime("-1 week"))."');

選択したIDは1週間以上前のものです。

于 2012-06-02T09:32:43.283 に答える
0

最初に開始日を設定します。その日が来たら、次のようにします。

$next_date = strtotime('+2 weeks');

これにより、同じ日に取得できますが、わずか 2 週間後です。そして、サイクルは続きます:)

于 2012-06-02T08:28:40.357 に答える