在PHP中基于日期显示文本

时间:2016-01-07 05:48:40

标签: php arrays

编辑:为了更好地澄清我想要做的事情......我希望! :)

以下代码在if语句中没有else的情况下完美运行。这是我试图添加的“其他”。当我这样做时,我会在下面的问题中得到回声。

再次感谢您的时间!

为了防止线程从2014年复活......我需要提出一个问题......

我想知道是否可以从一些开始困扰我的事情中得到一些额外的帮助。

我正在尝试使用位于此主题(Display image based on date in PHP)底部的代码,如果日期不是定义的,则修改为显示“默认”图像。

这是我的代码:

(而不是图像,我放置'test#'而不是图像路径。)

$events = array(
                array(
                      'image' => 'test1',
                      'start' => '05-01',
                      'end' => '06-01'
                     ),
                array(
                      'image' => 'test2',
                      'start' => '07-01',
                      'end' => '08-01'
                     )
               );

以及foreach代码:

(我删除了img标签,以便它回显相应的'test#'。)

foreach($events as $event) {
if(date('d-m') >= $event['start'] && date('d-m') <= $event['end']) {
echo $event['image'];
} else {
echo 'test3';
};

当我使用以下内容时,它仅显示“test3test2”而不是“test2”。

我试过添加“break;”在else回声之后。当我这样做时,它会删除有效的“test#”并离开“test3”。

任何帮助都会非常感激,因为我已经踢了两天......

如果还有其他方法可以做得更好,请告诉我!

4 个答案:

答案 0 :(得分:2)

你正在进行字符串比较。你需要一个日期比较。在比较之前,您可以先以毫秒为单位转换日期。

您可以使用strtotime转换日期(以毫秒为单位),然后进行比较,如下所示。

foreach($events as $event) {
   if(strtotime(date('d-m')) >= strtotime($event['start']) && strtotime(date('d-m')) <= strtotime($event['end'])) {
   echo $event['image'];
} else {
   echo 'test3';
}

编辑:可能添加年份对于更好的比较非常有用。

foreach($events as $event) {
   if(strtotime(date('d-m-2016')) >= strtotime($event['start']."-2016") && strtotime(date('d-m-Y')) <= strtotime($event['end']."-2016")) {
   echo $event['image'];
} else {
   echo 'test3';
}
}

答案 1 :(得分:1)

如果没有其他功能,请将其删除。在循环之前添加默认值。

$image = 'test3':

foreach($events as $event) {
    if(date('d-m') >= $event['start'] && date('d-m') <= $event['end']) {
       $image = $event['image'];
       break;
    }
}

echo $image;

答案 2 :(得分:0)

字符串比较从左开始。在日期比较中,你必须先检查yerar,然后是月份,最后是一天。也使用strcmp而不是运算符。

foreach($events as $event) {
if( strcmp( date('m-d'), $event['start'])>0 .... ) {
echo $event['image'];
} else {
echo 'test3';
}; 

答案 3 :(得分:0)

试试这个

$events = array(
    array(
           'image' => 'test1',
           'start' => '05-01',
           'end' => '06-01'
         ),
    array(
           'image' => 'test2',
           'start' => '07-01',
           'end' => '08-01'
         )
   );


foreach($events as $event) {
    list($st_date,$st_month) = explode('-',$event['start']);
    list($end_date,$end_month) = explode('-',$event['end']);
    $cur_date = date('d');
    $cur_month = date('m');
    if( ( $st_date >=  $cur_date &&  $cur_month == $st_month  ) && (   $cur_date <= $end_date  &&  $cur_month == $end_month  )  ){
        echo $event['image'];
    } 

}