【问题标题】:dates comparison and logic in phpphp中的日期比较和逻辑
【发布时间】:2016-01-04 15:16:11
【问题描述】:

我有一个场景,我需要根据日期比较来制定一些逻辑。我有点卡住了,非常感谢一些帮助。

场景:

我有包含这些字段的用户表,

period, start_from, valid_to

期间的值可以是(1 个月、2 个月、3 个月、4 个月、6 个月、12 个月)。 start_from 和 valid_to 是日期字段。

如果用户在期间选择了 1。这意味着应该每月向用户发送一封电子邮件。如果用户选择了 2,这意味着应该每两个月向用户发送一封电子邮件。如果选择 3,则应每三个月发送一封电子邮件,以此类推。

如果是年底,也就是 12 月 31 日。无论该时间段是否完成,都应向用户发送过去时间的电子邮件。

示例:如果用户的 start_from 日期是 2015 年 10 月,并且选择了期间 4。尽管事实上,应在 2015 年 12 月结束时向用户发送一封电子邮件,涵盖 oct、nov 和 dec(三个月)那4个月还没有过去。但是在 2016 年,由于用户选择了 4 个月,因此应该在 4 月底发送新的第一封电子邮件。

我有点坚持拼凑整个逻辑,但这就是我到目前为止所做的,我没有看到和解决这个代码。 所以最好避开代码。

$currMonth = (int) date('n',$currtime);
if($currMonth<12){
    $period = (int) $PU_Result->rs['period'];
    if($period>1){
        $validFrom = (int) date('n',strtotime($PU_Result->rs['start_from']));
        $requiredMonth = $validFrom+$period;
        if($requiredMonth>12)
            $requiredMonth=12;
        if($currMonth!=$requiredMonth)
            continue;
    }

}

我正在循环执行这段代码。如果条件不满足,我退出迭代,否则我最终发送邮件。

【问题讨论】:

  • 问题是什么?
  • 谷歌“php比较日期”或“mysql比较日期”。当您谈到字段时,我猜测您使用的是 mysql。 mysql可以帮你比较日期。
  • 是的,我正在使用 mysql。比较不是逻辑的问题。

标签: php date logic


【解决方案1】:

第一次检查:start_from 的年份是当前年份。如果是这种情况,那么您需要从该日期开始迭代期间,除了 12 月。

如果不是这样:您将从 1 月开始“循环”。

伪:

if (
       (current_year == start_year)
       && (
           (start_month + period) == current_month
           || current_month == 12
       )
       || (current_month == period)
) {
    // Do your stuff
}

添加了特殊的缩进,以便您了解应该如何构建 if 语句。

这个伪代码并不完全是你想要的,但它是你正在寻找的逻辑的开始。
例如:这每年只工作一次,你需要弄清楚每次如何做(专业提示:模运算符)。

【讨论】:

  • 这只是一行我不知道我在想什么.... if($current_month.%$period==0) send mail;这就是我一直在寻找的:)
猜你喜欢
  • 1970-01-01
  • 2016-06-25
  • 1970-01-01
  • 1970-01-01
  • 2016-08-25
  • 1970-01-01
  • 1970-01-01
  • 2018-05-14
  • 1970-01-01
相关资源
最近更新 更多