Php 从开始日期开始计算周期性间隔

Php 从开始日期开始计算周期性间隔,php,dateinterval,Php,Dateinterval,这就是我所拥有的: Start Date (yyyy-mm-dd) Interval : n Interval Type : hour, day, week, month, year 这就是我需要的: 是周期性间隔中的当前时间/日期 Data/Example: Today : 2013-07-16 12:37 Event Data : Start Date : 2012-04-03 12:30 Interval : 2 Interval Type : week

这就是我所拥有的:

Start Date (yyyy-mm-dd)  
Interval : n   
Interval Type : hour, day, week, month, year 
这就是我需要的: 是周期性间隔中的当前时间/日期

Data/Example:  
Today : 2013-07-16 12:37  

Event Data :  
Start Date : 2012-04-03 12:30  
Interval : 2  
Interval Type : week  
2012年04月03日是星期二。2013-07-16也是如此。如何计算(在PHP中)每一个第二个星期二的重复时间是在今天还是在上星期二

有人吗

编辑:
@hek2mgl我是这样做的

/* Check for recurring window is legit */
$interval_string ="P".$mm["mm_reoc_interval"];
switch ($mm["mm_reoc_interval_type"])
{
    case 1: $interval_string .= "H"; break;
    case 2: $interval_string .= "D"; break;
    case 3: $interval_string .= "W"; break;
    case 4: $interval_string .= "M"; break;
    case 5: $interval_string .= "Y"; break;
}

$start = DateTime::createFromFormat("Y-m-d H:i:s", $mm["mm_reoc_start_date"]." ".$mm["mm_reoc_start_hour"].":00");
$end = DateTime::createFromFormat("Y-m-d H:i:s", $date_time);
$interval = new DateInterval($interval_string);
$occurrences = 3;
$period = new DatePeriod($start,$interval,$end);
foreach($period as $dt){
  $date_array[] = $dt->format("Y-m-d");
}

if(in_array($today, $date_array)) 
{
       bla.bla..
    }

您可以使用
strotime

你可以这样说:
strotime(“+1周”)
strotime(“+1个月”)


要相对于当前时间以外的特定时间工作,请将
unix epoch time
值传递到
strotime
的第二个参数,您可以使用
strotime

你可以这样说:
strotime(“+1周”)
strotime(“+1个月”)


要相对于当前时间以外的特定时间工作,请将
unix epoch time
值传递给
strotime

的第二个参数。您可以将
DateTime
类与以下参数一起使用:


选中此项,查看哪些标识符可用于相对日期时间格式。

您可以将
日期时间
类与以下内容一起使用:


检查此项以查看哪个标识符可以用于相对日期时间格式。

这应该可以实现以下功能:

<?php
$start = "2012-04-03";
$compare = "2013-07-17";

$start_date = new Datetime($start); 
$compare_date = new Datetime($compare);
$diff = $start_date->diff($compare_date);
$diff_d = ($diff->days);

$round = (int)($diff_d/14); // 14: every 2nd week!
$diff_d2 = $round * 14;

if (0==$diff_d-$diff_d2) {
   echo "<br>Today is the day!";
} else {
   $d1 = $start_date->add(new DateInterval ("P" . $diff_d2 . "D"));
   echo "Last match was " . $d1->format('Y-m-d');
}
?>

这应该可以做到:

<?php
$start = "2012-04-03";
$compare = "2013-07-17";

$start_date = new Datetime($start); 
$compare_date = new Datetime($compare);
$diff = $start_date->diff($compare_date);
$diff_d = ($diff->days);

$round = (int)($diff_d/14); // 14: every 2nd week!
$diff_d2 = $round * 14;

if (0==$diff_d-$diff_d2) {
   echo "<br>Today is the day!";
} else {
   $d1 = $start_date->add(new DateInterval ("P" . $diff_d2 . "D"));
   echo "Last match was " . $d1->format('Y-m-d');
}
?>

手表类(和)

我希望特别有用。

观看课程(和)


我希望特别有用。

你读过《标准时间》
手册吗?你读过《标准时间》
手册吗?如果我将开始日期设置为:2013-07-09 21:00+1周:今天是2013-07-02 21:00+1周:不是今天,所以它可以看到+1周。但并不是说它会在一周后重复week@osomanden我想你们理解错了(或者问题不清楚)。玩一下我的代码,阅读我链接的手册页面。如果我将开始日期设置为:2013-07-09 21:00+1周,您很快就会看到它是如何工作的:它是今天2013-07-02 21:00+1周:它不是今天,所以它可以看到+1周。但并不是说它会在一周后重复week@osomanden我想你们理解错了(或者问题不清楚)。玩一下我的代码,阅读我链接的手册页面。你很快就会看到它是如何工作的