PHP查找离时间轴最近的日期

所以,呃,好的。 这可能会得到数学,所以希望你带上你的科学计算器;)

这是我的问题:

给定一个初始日期(时间戳),时间段(秒)和今天的日期(时间戳),我需要找到与期间* n加上原始/初始日期一致的最近日期。

到目前为止,我得到了一些很好用的东西,比如初始和最终(今天)日期之间的“时段”数量,在上面的演示中这将是“2”:

$initial=strtotime('2 April 1991');
$time=time();
$period=strtotime('+10 years',0);

$periods=round(($time-$initial)/$period);

接下来我做的是:

$range=$periods*$period;

最后:

echo date('d M Y',$initial+$range);

其中写'2011年4月3日'。 它是如何达到3的? (我怀疑这是一个闰年问题?)你知道这种感觉,当你错过了一些小事? 我现在感觉到这一切......


好的,如果我明白你在问什么,你想知道在特定时间内发生的下一个日期(在你的情况下,从1991年4月2日开始,每隔10年,下一个日期是:2011年4月2日)。

因此,您应该深入了解PHP中的DateTime类,因为它更准确,所以在日期中使用更方便。 您可以将它与DateInterval完全匹配,并且与您需要的完全匹配:

<?php
$interval = new DateInterval('P10Y'); // 10 years
$initial = new DateTime('1991-04-02');
$now = new DateTime('now');

while ($now->getTimestamp() > $initial->getTimestamp()) {
    $initial = $initial->add($interval);
}

echo $initial->format('d M Y'); // should return April 2, 2011 !
?>

尝试一下:

$current = $initial = strtotime('2 April 1991');
$time_span = '+10 years';

while ($current < time())
{ 
  $current = strtotime($time_span, $current);
}

echo date('d M Y', $current);

发生了什么:

从0年(1970年)开始的+10 years将包括'72,'76和'80三个闰年,但是从'91'到'11'只有五个闰年'92,'96','00','04'和'08 。 你增加了这个时间两次,所以因为没有6个闰年,你多了一天。

你需要做什么:

一次strtotime一步一步地加上这段时间。

$period = "+10 years";
$newTime = $startingTime;
while(<condition>){
    $newTime = strtotime($period, $newTime);
}
链接地址: http://www.djcxy.com/p/49561.html

上一篇: PHP Find date nearest to a timeline period

下一篇: HTML5 video performance