elseif使用datetime

时间:2016-02-10 16:24:23

标签: php

我有一个小问题。我帮助代码显示了两周的付费周期,这很好,但是我不知道如何使用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会起作用但是在休息日,我不明白。

感谢您的帮助。

1 个答案:

答案 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日。您可能需要仔细检查。