php 中的日期比较和逻辑
dates comparison and logic in php
我有一个场景,我需要根据日期比较制定一些逻辑。我有点卡住了,真的很感激一些帮助。
场景:
我有用户 table 使用这些字段,
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;
}
}
我正在循环执行这段代码。如果条件不满足,我将退出迭代,否则我将发送邮件。
首先检查:start_from 的年份是当前年份。如果是这种情况,那么您需要从该日期开始迭代期间,但 12 月除外。
如果不是这样:您将从 1 月开始 'loop'。
伪:
if (
(current_year == start_year)
&& (
(start_month + period) == current_month
|| current_month == 12
)
|| (current_month == period)
) {
// Do your stuff
}
添加了特殊缩进,以便您了解应该如何构建 if-statement。
这个伪代码不完全是你想要的,但它是你正在寻找的逻辑的开始。
例如:这每年只能工作一次,你需要弄清楚每次如何做(pro-tip:模运算符)。
我有一个场景,我需要根据日期比较制定一些逻辑。我有点卡住了,真的很感激一些帮助。
场景:
我有用户 table 使用这些字段,
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;
}
}
我正在循环执行这段代码。如果条件不满足,我将退出迭代,否则我将发送邮件。
首先检查:start_from 的年份是当前年份。如果是这种情况,那么您需要从该日期开始迭代期间,但 12 月除外。
如果不是这样:您将从 1 月开始 'loop'。
伪:
if (
(current_year == start_year)
&& (
(start_month + period) == current_month
|| current_month == 12
)
|| (current_month == period)
) {
// Do your stuff
}
添加了特殊缩进,以便您了解应该如何构建 if-statement。
这个伪代码不完全是你想要的,但它是你正在寻找的逻辑的开始。
例如:这每年只能工作一次,你需要弄清楚每次如何做(pro-tip:模运算符)。