我正在使用PHP生成循环日期来处理日期。我有一个startDateTime和endDateTime。这两个变量用于系列中的第一个日期。
如果偶数每周二重复,则需要在
的行中添加一些内容 $repeatDay = "Tuesday";
$followingDay = strtotime($startDateTime. " following $repeatDay");
使用"next $repeatDay"不起作用,因为我没有从今天的日期生成日期。
编辑:似乎每五个循环一次,时间就向前跳一个小时。这可能是因为$start="2014-04-29 11:00:00"和strtotime只正确地转换日期。
如何将2014-04-29 11:00:00转换为strtotime可以理解的格式?
$firstOccurrence=strtotime($start);
$nextOccurence=strtotime("next $day", $firstOccurrence); //Set the first recurring date for this day
while($nextOccurence<=strtotime($activeUntil)){
echo date("M d, Y H:m:i",$nextOccurence)." | ";
$nextOccurence=strtotime("next $day", $nextOccurence);
}
也许是时候开始使用DateTime了?修改日期非常复杂。例如,从$start创建日期时间如下所示:
$start="2014-04-29 11:00:00";
$dateTime=DateTime::createFromFormat("Y-m-d H:m:i", $start);
因为你有$dateTime,你可以把它修改一天:
$dateTime->modify('+1 day');
//or just
$dateTime->modify('next tuesday');
//and return it as string
echo $dateTime->format("M d, Y H:m:i");
DateTime理解strtotime所做的一切,因此它可以改进您的解决方案。你自己试试吧,如果有帮助的话告诉我。
strtotime()
可接受2个参数。第一个是字符串,第二个是基本时间戳。
尝试以下操作:
// Assuming $startDateTime is a timestamp.
$followingDay = strtotime("next $repeatDay", $startDateTime);