我有一个场景,我需要根据日期比较制作一些逻辑。我有点卡住,真的很感激一些帮助。
情景:
我有这些字段的用户表,
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;
}
}
我正在循环中执行这段代码。如果条件不符合我退出迭代,否则我最终发送邮件。
答案 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)。