脚本宝典收集整理的这篇文章主要介绍了PHP 5.3 DateTime用于重复发生的事件,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
>我有一个定期活动,从2009年11月16日开始(2009年11月16日)
>它将每3天发生一次
>该事件将无限期重演
假设用户查看截止日期为3100的日历 – 此事件应该显示正常情况下每3天重复一次.问题是 – 如何计算该月的那些日子?
=========================================
这就是我基本上这样做的方式,但我知道我更容易丢失一些东西:
>我计算存储为$daysDiff的月份开始(2009年12月1日)和事件开始日期(2009年11月16日)之间的天数差异
>我减去模数,所以我从一开始就得到3天的因子:$daysDiff – ($daysDiff%3)
>为了争论,我们可以说是给了我11月29日3100作为约会.
>然后我反复添加3天到那个日期,直到我在12月31日之前有所有日期
我的主要问题来自第1步.PHP Dateinterval :: date_diff函数不计算天数差异.它会给我几年,几个月和几天.然后,我必须捏造这些数字以获得大约在3100年12月左右的估计日期.
11/16/2009(1090年* 365.25天)(9个月* 30.5天)15天
$startDate = new DateTime(20091116); $startTimestamp = $startDate->format('u'); $recursEvery = 259200; // 60*60*24*3 = seconds in 3 days // find the First occurrence in the selected month (September) $calendarDate = new DateTime(31000901); // inIT to Sept 1,3100 while (0 != (($calendarDate->format('u') - $startTimestamp) % $recursEvery)) { $calendarDate->modify('+1 day'); } $effectiveDates = array(); while ($calendarDate->format('m') == 9) { $effectiveDates[] = clone $calendarDate; $calendarDate->modify('+3 day'); } //$effectiveDates is an array of every date the event occurs in September,3100.
显然,你有一些变量可以换出,所以用户可以选择任何一个月,但这应该是基本的算法.另外,确保您的DateTimes是正确的日期,但时间设置为00:00:00,否则第一个while循环将永远不会解析.这也假设您确保所选日期晚于事件的开始日期.
以上是脚本宝典为你收集整理的PHP 5.3 DateTime用于重复发生的事件全部内容,希望文章能够帮你解决PHP 5.3 DateTime用于重复发生的事件所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。