在使用php时,如何在另一个给定日期之后找到某个日期?

在使用php时,如何在另一个给定日期之后找到某个日期?,php,date,Php,Date,如何在另一个日期之后找到下一个固定日期 例如: 我需要知道四月一日是什么时候 如果我的日期是2013-02-28,我需要返回2013-04-01 如果我的日期是2013-05-01,我需要返回2014-04-01 有没有快速的方法可以做到这一点 更新 相对日期格式在PHP5.3.3中无法正常工作 这就是我要做的: function aprilFoolsDay($datein,$format){ $date = new DateTime($datein); $year = $d

如何在另一个日期之后找到下一个固定日期

例如:

我需要知道四月一日是什么时候

如果我的日期是2013-02-28,我需要返回2013-04-01

如果我的日期是2013-05-01,我需要返回2014-04-01

有没有快速的方法可以做到这一点

更新

相对日期格式在PHP5.3.3中无法正常工作 这就是我要做的:

function aprilFoolsDay($datein,$format){

    $date = new DateTime($datein);

    $year = $date->format("Y");

    $april = new DateTime($year.'-04-01');

    if($date > $april){

        $april = new DateTime(($year + 1).'-04-01');

    }

    return $april->format($format);

}


echo aprilFoolsDay('2011-05-28','Y-m-d');
我不认为支持“明年四月”(这个例子当然不起作用),但你可以这样做:

$date = new DateTime("2013-05-01");
$target_date = new DateTime("April 1");
$date->modify(
  $target_date->format("m/d"). 
  (($date->format('m')>$target_date->format('m'))?"+1 year":'')
);
echo $date->format("Y-m-d"); // output: 2014-04-01
我不认为支持“明年四月”(这个例子当然不起作用),但你可以这样做:

$date = new DateTime("2013-05-01");
$target_date = new DateTime("April 1");
$date->modify(
  $target_date->format("m/d"). 
  (($date->format('m')>$target_date->format('m'))?"+1 year":'')
);
echo $date->format("Y-m-d"); // output: 2014-04-01
你可以用它来做。注意:此功能可识别时区

此函数的每个参数都使用默认时区,除非 时区在该参数中指定。小心不要使用 每个参数中都有不同的时区,除非另有规定。看见 date\u default\u timezone\u get()介绍定义默认值的各种方法 时区

$dtstr='2013-03-28';
$dtmonth=日期(“m”,标准时间($dtstr));
$dtyear=日期(“Y”,标准时间($dtstr));
$dtyear=$dtmonth您可以使用。注意:此功能可识别时区

此函数的每个参数都使用默认时区,除非 时区在该参数中指定。小心不要使用 每个参数中都有不同的时区,除非另有规定。看见 date\u default\u timezone\u get()介绍定义默认值的各种方法 时区

$dtstr='2013-03-28';
$dtmonth=日期(“m”,标准时间($dtstr));
$dtyear=日期(“Y”,标准时间($dtstr));

$dtyear=$dtmonth您可以使用相对时间格式来获取所需日期:

$date1 = new DateTime('2013-02-28');
$date2 = clone $date1;
$date2->modify('First day of  April');
if ($date2 < $date1) {
    $date2->modify('+1 year');
}
echo $date2->format('Y-m-d');

$date1 = new DateTime('2014-05-01');
$date2 = clone $date1;
$date2->modify('First day of  April');
if ($date2 < $date1) {
    $date2->modify('+1 year');
}
echo $date2->format('Y-m-d');
这是一个可重用的函数:

echo getNextAprilFirst('2013-02-28');
echo getNextAprilFirst('2014-05-01');

function getNextAprilFirst($date) {
    $date1 = new DateTime($date);
    $date2 = clone $date1;
    $date2->modify('First day of  April');
    if ($date2 < $date1) {
        $date2->modify('+1 year');
    }
    return $date2->format('Y-m-d');
}

您可以使用相对时间格式获取您要查找的日期:

$date1 = new DateTime('2013-02-28');
$date2 = clone $date1;
$date2->modify('First day of  April');
if ($date2 < $date1) {
    $date2->modify('+1 year');
}
echo $date2->format('Y-m-d');

$date1 = new DateTime('2014-05-01');
$date2 = clone $date1;
$date2->modify('First day of  April');
if ($date2 < $date1) {
    $date2->modify('+1 year');
}
echo $date2->format('Y-m-d');
这是一个可重用的函数:

echo getNextAprilFirst('2013-02-28');
echo getNextAprilFirst('2014-05-01');

function getNextAprilFirst($date) {
    $date1 = new DateTime($date);
    $date2 = clone $date1;
    $date2->modify('First day of  April');
    if ($date2 < $date1) {
        $date2->modify('+1 year');
    }
    return $date2->format('Y-m-d');
}

这不起作用。第二个例子在时间上倒退。OP想要下一个发生,为什么要克隆一个现有的对象&修改而不是一个开始日期正确的新对象?因为我们不知道该日期是哪一年。如果我们只使用
“四月一日”
今年我们将永远得到。。。但是,如果你只是比较月份而不是日期作为一个整体,这是没有必要的。看起来根本不起作用,PHP5.3中是否提供了相对时间格式?这不起作用。第二个例子在时间上倒退。OP想要下一个发生,为什么要克隆一个现有的对象&修改而不是一个开始日期正确的新对象?因为我们不知道该日期是哪一年。如果我们只使用
“四月一日”
今年我们将永远得到。。。但是,如果您只是比较月份而不是日期作为一个整体似乎根本不起作用,那么就没有必要了,PHP5.3中是否提供了相对时间格式?
<?php
/**
 * @param $date string of date
 * @return unix time of april fools
 */
function getNextAprilFoolsOfYear($date) {
    // unix time for date
    $unixdate = strtotime($date);

    $year = date('Y', $unixdate);

    $currentyearfools = strtotime($year . '-04-01');

    // check if current date is past this year april fools or not
    if ($unixdate < $currentyearfools) {
        // if not pass yet
        return $currentyearfools;
    } else {
        return strtotime(($year + 1) . '-04-01');
    }
}

echo date('Y-m-d', getAprilFoolsOfYear('2014-01-01'));
echo '<br />';
echo date('Y-m-d', getNextAprilFoolsOfYear('2014-05-01'));
2014-04-01
2015-04-01