0

我有以下代码从数据库中的时间戳获取日期,然后将其与特定日期进行比较,并相应地将变量设置为某个值:

    $leavedate=$this->leavedate;
    $leavestamp=strtotime($leavedate[0]['LoppumisPvm']);
    $leave=date('d M',$leavestamp);
    echo "the leave is: ".$leave; //this one prints: 12 Apr

        $leavequarter="";
       if(strtotime($leave)>= strtotime('01 Jan') && strtotime(($leave)<= strtotime('15 Jan'))){$leavequarter=1;}
       elseif(strtotime($leave)>= strtotime('01 Apr') && strtotime(($leave)<= strtotime('15 Apr'))){$leavequarter=2;}
       elseif(strtotime($leave)>= strtotime('01 Jul') && strtotime(($leave)<= strtotime('15 Jul'))){$leavequarter=3;}
       elseif(strtotime($leave)>= strtotime('01 Oct') && strtotime(($leave)<= strtotime('15 Oct'))){$leavequarter=4;}


    echo $leavequarter;

第一个回声有效,我得到了12 Apr基本上应该适合第二个if语句的东西,但是,第二个回声不打印任何东西,即使我echo "test在那些 if 语句中放了类似“没有被执行”的东西。我做错了什么吗?

4

4 回答 4

2

您错误地嵌套了代码:

elseif(strtotime($leave)>= strtotime('01 Apr') && strtotime(($leave)<= strtotime('15 Apr')))

它应该是:

elseif(strtotime($leave)>= strtotime('01 Apr') && strtotime($leave)<= strtotime('15 Apr'))
                                                           ^                             ^
于 2013-04-24T12:08:46.277 回答
0

试试这个代码:

if((strtotime($leave)>= strtotime('01 Jan')) && (strtotime($leave)<= strtotime('15 Jan'))){$leavequarter=1;}
    elseif((strtotime($leave)>= strtotime('01 Apr')) && (strtotime($leave)<= strtotime('15 Apr'))){$leavequarter=2;}
    elseif((strtotime($leave)>= strtotime('01 Jul')) && (strtotime($leave)<= strtotime('15 Jul'))){$leavequarter=3;}
    elseif((strtotime($leave)>= strtotime('01 Oct')) && (strtotime($leave)<= strtotime('15 Oct'))){$leavequarter=4;}   
echo $leavequarter;
于 2013-04-24T12:22:58.210 回答
0

首先,我不会用strtotime来做这一切。这是资源消耗并且取决于语言环境。

最好使用日期功能。

$leavedate = $this->leavedate;
$leavestamp = strtotime($leavedate[0]['LoppumisPvm']);
$leave = date('d M', $leavestamp);
echo "the leave is: " . $leave; //this one prints: 12 Apr

$leavequarter = "";
if (date('m', $leavestamp) == 1 && date('d', $leavestamp) >= 1 && date('d', $leavestamp) <= 15)
{
    $leavequarter = 1;
}
elseif (date('m', $leavestamp) == 4 && date('d', $leavestamp) >= 1 && date('d', $leavestamp) <= 15)
{
    $leavequarter = 2;
}
elseif (date('m', $leavestamp) == 7 && date('d', $leavestamp) >= 1 && date('d', $leavestamp) <= 15)
{
    $leavequarter = 3;
}
elseif (date('m', $leavestamp) == 10 && date('d', $leavestamp) >= 1 && date('d', $leavestamp) <= 15)
{
    $leavequarter = 4;
}


echo $leavequarter;

但你想做什么?我想你想得到一年中的季度,但这只会给出 1 月 1 日到 1 月 15 日的结果,4 月、7 月和 10 月的结果也是如此。

老实说,我认为这就是你想要的:

$leavedate = $this->leavedate;
$leavestamp = strtotime($leavedate[0]['LoppumisPvm']);
$leave = date('d M', $leavestamp);
echo "the leave is: " . $leave; //this one prints: 12 Apr

$leavequarter = (int) ((date('m', $leavestamp) - 1) / 3) + 1;
echo $leavequarter;
于 2013-04-24T12:14:54.587 回答
0

语法错误第三个 strtotime got double (( 涵盖第二个状态如何

   if(strtotime($leave)>= strtotime('01 Jan') && strtotime($leave)<= strtotime('15 Jan')){$leavequarter=1;}
   elseif(strtotime($leave)>= strtotime('01 Apr') && strtotime($leave)<= strtotime('15 Apr')){$leavequarter=2;}
   elseif(strtotime($leave)>= strtotime('01 Jul') && strtotime($leave)<= strtotime('15 Jul')){$leavequarter=3;}
   elseif(strtotime($leave)>= strtotime('01 Oct') && strtotime($leave)<= strtotime('15 Oct')){$leavequarter=4;}
于 2013-04-24T12:11:03.027 回答