我有一个小问题。我帮助代码显示了两周的付费周期,这很好,但是我不知道如何使用elseif在给定的日子里显示div。
这是我的代码:
$startDate = new DateTime('2016-01-25');
$endDate = new DateTime('2016-01-29');
$curDate = new DateTime('NOW');
$curDateFriendly = $curDate->format('F j');
$nextDate = $startDate->modify('+2 weeks');
$nextDateFriendly = $nextDate->format('F j');
$payDate = $endDate->modify('+2 weeks');
$payDateFriendly = $payDate->format('F j');
while ($curDate->getTimestamp() > $nextDate->getTimestamp() && $curDate->getTimestamp() < $payDate->getTimestamp()) {
$nextDate->modify('+2 weeks')->format('F j');
$payDate->modify('+2 weeks')->format('F j');
这是我的其他我想尝试使用
if ( $curDateFriendly >= $nextDateFriendly && $curDateFriendly <= $payDateFriendly ) { echo "Payweek" ; }
我添加了“友好”格式来比较日期,也是一个提示,我的elseif会起作用但是在休息日,我不明白。
感谢您的帮助。
答案 0 :(得分:0)
所以这只是一个沉思,但由于你的薪水周是每两周一次,这应该意味着如果你从第1周开始,你的薪水周总是会在一年中的一个奇怪的一周。 (1,3,5 ... n)就好像你在第2周开始一样,它应该总是在一周(2,4,6 ... n)上着陆。
因此,你有可能根据当前周数的平价来计算它是否是一个工资周?
即。
function isPayWeek($parity) {
$parityBool = ($parity == 'even') ? true : false;
$d = new DateTime();
$weekNumber = $d->format('W');
return ($weekNumber % 2 == 0) == $parityBool;
}
这将返回true / false,具体取决于您是否传入'even'/其他内容。正如我在评论中所说的那样,我还没有完全测试过,但我之前使用了类似的东西来制作Sprint,它似乎对我有用,你的情况听起来很相似。
通过这种方式,您可以调用函数isPayWeek('even')
或奇数,具体取决于您的付费周何时落入if statement
并在条件正文中添加<div/>
,如下所示:
$html = '';
if (isPayWeek('even')) {
$html .= '<div>your content</div>';
}
我不知道你是如何构建你的视图的,你是否使用模板引擎如twig等,所以很难确切地说你如何显示div。
Edit2 除此之外,这可能有所帮助:
您当前的条件评估这两个语句(注意:我使用了'非友好'语句,因为您可以直接比较DateTime
个对象)
if (2016-02-10 >= 2016-02-22 && 2016-02-10 <= 2016-02-26) {}
由于条件声明中的第一个分支,它没有执行,2月10日不超过2月22日。您可能需要仔细检查。