其他问题如果使用日期时间


Issue with elseif using datetime

>我有一个小问题。我在显示两周前发薪周的代码方面得到了帮助,这工作正常,但我不确定如何使用 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');

这是我的else如果我试图使用

if ( $curDateFriendly >= $nextDateFriendly && $curDateFriendly <= $payDateFriendly ) { echo "Payweek" ; }

我添加了"友好"格式来比较日期,也是一个提示,我的elseif可以工作,但在休息日,我不明白。

感谢您的任何帮助。

所以这只是一个沉思,但由于您的发薪周是每 2 周一次,这应该意味着如果您从第 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;   
}

这将返回真/假,具体取决于您是否传入"偶数"/其他内容。正如我在评论中所说,我还没有完全测试过它,但我以前使用过类似的东西来制定 Sprints,它似乎对我有用,你的情况听起来很相似。

这样,您就可以根据发薪周何时进入if statement调用isPayWeek('even')或奇数函数,并在条件的正文中添加<div/>,如下所示:

$html = '';
if (isPayWeek('even')) {
    $html .= '<div>your content</div>';
}

我不知道你是如何构建视图的,你是否使用像树枝这样的模板引擎等,所以很难确切地说出如何显示div。

编辑2 除此之外,这可能会有所帮助:

您当前的条件评估这两个语句(注意:我使用了"不友好"的语句,因为您可以直接比较DateTime对象(

if (2016-02-10 >= 2016-02-22 && 2016-02-10 <= 2016-02-26) {}

它不会执行,因为您的条件语句中的第一个分支,2 月 10 日不大于 2 月 22 日。您可能需要仔细检查一下。