【问题标题】:recurring date functions in phpphp中的重复日期函数
【发布时间】:2013-07-08 18:17:21
【问题描述】:

美好的一天,

我正在尝试创建具有以下内容的循环日期系统:

第n个月的第n天(每3个月的第二天)

$this_months_friday = strtotime('+3 days +4 months');

其输出将始终为当天 + 第 4 个月的 3 天。

如何让它显示第 n 个月的第 n 天?

因为我也试过

$this_months_friday = strtotime('every 3 days +4 months');

它没有返回任何结果。我应该在这个上坚持使用 strtotime 还是转到 php 的 DateTime 函数。虽然我仍然无法为这种日期序列制定适当的论据。

任何帮助将不胜感激。

谢谢。

【问题讨论】:

    标签: php datetime strtotime


    【解决方案1】:

    在几个时间间隔内使用 DateTime 可能会更好:

    $d = new DateTime();
    $d->add(new DateInterVal('P' . $days . 'D'))->add('new DateInterVal('P' . $months . 'M'));
    

    不确定你的两个示例间隔想要什么。

    您希望在 4 个月后开始一个间隔,然后每 3 天重复一次?

    这更像是

    $d = new DateTime();
    $d->add(new DateInterval('P4M')); // jump ahead 4 months immediately
    $day3 = new DateInterval('P3D');
    
    for ($i = 0; $i < 100; $i++) {
       $d->add($day3); // jump ahead 3 days
       ... do something with this new date
    }
    

    对于一个基本的重复事件,+4 个月 + 3 天,您只需有一个间隔:

    $interval = new DateInteval('P4M3D'); // +4 months +3 days
    $date = new DateTime();
    while($some_condition) {
       $date->add($interval);
       do_something();
    }
    

    【讨论】:

    • 不,它更像是第 4 个月的第 4 天,根据一些阅读,我做了 +3 天 +4 个月,其中 +3 意味着它将在第 3 天,并且 +4 个月以来它总是每 4 个月重复一次。
    • 没有。 strtotime 会将+3 days 解释为 3 天后。与+4个月相同。例如今天 +3 天 +4 个月将成为 11 月 12 日。你可能不得不硬着头皮做一些日期数学。例如计算 +4 个月(11 月),然后重建一个新的日期字符串 2013-$M-03 以获得第 3 个。 strtotime 的英语解析有时令人惊叹,但它不是通灵的。而且完全太容易犯错。
    • 哦,我明白了,我怎么能把它解释为重复事件?实际上,我正在考虑每次日期到来时重置值。但我希望为此找到一个更简单的功能
    • php 不执行重复事件。随你(由你决定。请参阅我对上述答案的最后编辑。
    • 我明白了,谢谢,但您介意为您的答案添加一些解释吗?谢谢:)
    【解决方案2】:

    您可以通过将值保存在这样的变量中来做到这一点:

        $day=3;
        $month=4;
        echo date("d-m-y",strtotime('+'.$day .'days' .'+'.$month.'months'));
    

    解释:

    7(7 月)+4 个月 = 11 个月(11 月)

    8 7 月 + 3 天 = 11 7 月

    输出: 11-11-13

    注意:仅作为示例,我已将值硬编码,您可以使它们动态化。

    【讨论】:

      猜你喜欢
      • 2015-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-24
      • 1970-01-01
      • 2014-07-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多