【问题标题】:Check for repeating dates检查重复日期
【发布时间】:2010-06-10 21:51:42
【问题描述】:

我正在用 PHP 创建一个日历,并且在数据库中有一个日期,比如说 6-10-10。

有时我有重复的事件,存储为每周重复,所以如果日期是 6-10-10,并且我从那天(包括那一天)开始每两周重复一次事件,那么找到日期的最佳方法是什么从 6-10-10 每两周一次?

例如,假设日期是 7-8-10,我如何检查该日期是否符合我的条件?

【问题讨论】:

    标签: php date repeat


    【解决方案1】:

    循环是怎么回事?!离散数学 101:如何判断一个数是否为偶数? n%2==0

    您如何确定约会是否(呃...)每两周一次? date%2weeks==0

    折腾一个偏移量,你会得到(date-startdate)%2weeks

    $startdate = strtotime("10 June 2010");
    $otherdate = strtotime("8 July 2010");
    $twoweeks  = strtotime("+2 weeks") - time();
    if($otherdate>$startdate && (($otherdate-$startdate)%$twoweeks)==0) {
        // this is n * two weeks after
    }
    

    【讨论】:

    • 没问题,你完全正确 :) 这取决于用途——如果你需要生成日期以放入日历,你需要建立一个链。但这不是 OP 所要求的。
    • 原来我只是稍微调错了时间机器,而我的答案真的是针对今天出现的这个问题:stackoverflow.com/questions/3023235/array-of-previous-weeks :)
    【解决方案2】:

    你可以使用DATEDIFF函数。

    例如

    SELECT * FROM myTable WHERE ( DATEDIFF( myDate,  '2007-12-30' ) % 14 ) = 0
    

    【讨论】:

      【解决方案3】:

      如果这是一个日历,如何使用strtotime 构建一个有效日期链?

      // 10 dates every two weeks starting next thurdsay
      
      $valid_dates = array();
      $date_counter = 0;  
      $date_counter = strtotime("next thursday"); // I love being a lazy bastard!
      
      while ($i < 10)
       {
         array_push($valid_dates, $date_counter);
         $date_counter = strtotime("+2 weeks", $date_counter); 
         $i++;
      
       }
      
      foreach ($valid_dates as $date)
       echo date("Y/m/d", $date)."<br>";
      

      将输出:

      2010/06/17
      2010/07/01
      2010/07/15
      2010/07/29
      2010/08/12
      2010/08/26
      2010/09/09
      2010/09/23
      2010/10/07
      2010/10/21
      

      【讨论】:

      • 假设有效日期在某个时间点结束。如果我的有效日期在未来无限期出现(比如永远每 2 周设置一次)。
      • @kylex 是的,这是一种具有给定日期数量的方法。 DATEDIFF 方法对于这个特定的任务看起来更容易,如果你只需要这样做的话。您可能需要基于 strftime 之类的内容,但如果它变得更复杂,例如“每个月的第三个星期四”。
      【解决方案4】:

      MySQL 中 DATEDIFF 函数的结果不应该是 7(对于每周重复的事件)或 14(对于每两周重复的事件)等的倍数吗?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-04-03
        • 1970-01-01
        • 2017-10-16
        • 1970-01-01
        • 1970-01-01
        • 2023-03-19
        • 2013-09-27
        相关资源
        最近更新 更多