在PHP中的日期比较和逻辑

时间:2016-01-04 15:16:12

标签: php date logic

我有一个场景,我需要根据日期比较制作一些逻辑。我有点卡住,真的很感激一些帮助。

情景:

我有这些字段的用户表,

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;
    }

}

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

1 个答案:

答案 0 :(得分:0)

首先检查:start_from的年份是当前年份。如果是这种情况,那么您将需要迭代该日期的时间段,但12月除外。

如果情况并非如此:你将从1月开始'循环'。

伪:

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

添加了特殊缩进,以便您可以看到如何构建if语句。

这个伪代码并不完全是你想要的,但它是你正在寻找的逻辑的开始 例如:这只能每年工作1次,你需要弄清楚每次都是这样做的(pro-tip:modulo operator)。