6

我有一个网络调度应用程序,我目前正在重写它,并且对如何处理定期约会有一些疑问(我知道在定期应用程序方面不乏“什么是最好的方法”)。

因此,我想提供定期约会,用户可以安排约会日期为Sat, June 2nd,并且应该每隔一周在星期六重复一些预定的时间段(如 1 年)。

哪些 php 函数可以帮助我确定“每隔一个星期六”落在哪个日期?我附上我的用户界面图片以进行澄清。

在此处输入图像描述

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

好吧,我会先设定一个开始日期;当那一天到来时,您只需:

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

这让你在同一天,但仅仅两周后。循环继续:)

于 2012-06-02T08:28:40.357 回答
0

您可以使用数据库列以秒为单位存储时间:

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

然后,您可以在特定时期刚刚到来/过去的任何地方检查此值:

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

选择的 id(s) 是 1 周或更长时间。

于 2012-06-02T09:32:43.283 回答